home *** CD-ROM | disk | FTP | other *** search
Wrap
exchangeHelp .&+ +E Hotword gjumpPage buttonClick .&+ +E helptext enterPage .&+ +E .&+ +E previous buttonClick (jumpPage "helptext" FALSE HelpText subtitle PreviousBtn .&+ +E buttonUp FALSE Previous nextbtn .&+ +E buttonUp FALSE .&+ +E .&+ +E folder svReturnPage buttonUp 4svReturnPage sysSuspendMessages xwant [out information \ -- on sendNotifyBefore "folder" 1 -- needed because Return Paradox Browser 8v;d@ WdXfUF$F$F$F$U {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The page script handles initalization and cleanup for the frontend, links the DLLs and contains all handlers that actually communicate with the database DLL. All of the database functions are in the page script for easy maintainence, only the page script needs to be changed to change database DLLs. \par When a frontend is built, recordFields whose name are the same as the fields in the database file are created. These recordFields all have the same script with 3 notify handlers: \b0 \i \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 , \b0 \i \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDB\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 , and \b0 \i \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 clearFields\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 . These notify handlers call get and set handlers on the page to get and set data in the current record of the database file. \par This technique of using notify handlers is used for maintainability. To add a field from the database to the frontend, just copy one of the existing recordFields and set its name to the name of the database field. To delete a field from the frontend, just delete the recordField, no scripts must be changed. \par \par This page contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : enterApplication, leaveApplication, author, mouseEnter, linkPX, \par deleteRecord, updateDB, newRecord, packDatabase, \par helpForThisBook, searchForKey. \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to get\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentRecord, totalRecords, fieldValue, isPositiveInteger, nameOnly, \par removeExtension. \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to set\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : fieldValue, currentRecord.} helpMessage first record first WcurrentRecord PupdateDisplay buttonClick buttonClick currentRecord updateDisplay go to first record helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The First button navigates to the first record in the database by setting the currentRecord of the page. In the page script there is a to set currentRecord handler that does the actual navigation in the database. It then sends the updateDisplay notification message that notifies the recordFields to read their field from the current record in the database and update their text. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonClick \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sets\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentRecord of the page} helpMessage Previous buttondown previous WcurrentRecord PupdateDisplay buttonStillDown currentRecord updateDisplay go to previous record helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Previous button navigates to the previous record in the database by setting the currentRecord of the page. In the page script there is a to set currentRecord handler that does the actual navigation in the database. It then sends the updateDisplay notification message that notifies the recordFields to read their field from the current record in the database and update their text. Holding down the Previous button "flips" through the records by handling the buttonStillDown message. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonDown, buttonStillDown \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay, buttonStillDown \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sets\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentRecord of the page} helpMessage buttonDown WcurrentRecord PupdateDisplay buttonStillDown currentRecord updateDisplay go to next record helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Next button navigates to the next record in the database by setting the currentRecord of the page. In the page script there is a to set currentRecord handler that does the actual navigation in the database. It then sends the updateDisplay notification message that notifies the recordFields to read their field from the current record in the database and update their text. Holding down the Next button "flips" through the records by handling the buttonStillDown message. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonDown, buttonStillDown \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay, buttonStillDown \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sets\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentRecord of the page} helpMessage LastRecord WcurrentRecord PupdateDisplay buttonClick buttonClick currentRecord "Last" updateDisplay @"0'H go to last record helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Last button navigates to the last record in the database by setting the currentRecord of the page. In the page script there is a to set currentRecord handler that does the actual navigation in the database. It then sends the updateDisplay notification message that notifies the recordFields to read their field from the current record in the database and update their text. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonClick \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sets\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentRecord of the page} helpMessage sortbylabel Choose fields to Sort by: chooseIndex getPXErrorString closePXTable WcurrentRecord FindKey indexArray openPXTable database PupdateDisplay pParadoxfilename WcurrentRecord selectChange selectChange 4indexArray[] ZINT vRecordNumber = currentRecord closePXTable("database") getPXErrorString( openPXTable(" C, pParadoxfilename oselectedItem], 0) enabled B"FindKey" updateDisplay select an index file helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Choose Index combobx opens the database sorted in the order specified by the selected item. It uses a system variable to map the selected text line in the combobox to the correct index file. The system variable, \b0 \i \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 indexArray[]\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 , is initalized in the enterApplication handler. \par \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : selectChange \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends: \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay (notification message)} helpMessage IMARY $1f87 findKey Cancel Paradox Browser SUCCESS vQstrEnterField WcurrentRecord searchTable strEnterKey fieldName PupdateDisplay WcurrentRecord buttonClick buttonClick (strEnterField() "Cancel" fieldName (strEnterKey() searchTable ( <> "SUCCESS" currentRecord() = -- force update updateDisplay "Paradox Browser" ^4V8H go to a record by key value helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Find Key button searches the database for a record matching the specified text, sets it as the currentRecord and updates the display.\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \par \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonClick \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : searchForKey, \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDisplay (notification message)} helpMessage Search... goToRecord w, #? Cancel WcurrentRecord *totalRecords fstrOutOfRange strEnterRec PupdateDisplay buttonClick buttonClick (strEnterRec() <> NULL r<> "Cancel" (isType(INT, > 0) <= totalRecords() currentRecord updateDisplay && strOutOfRange() go to a record by record number helpText Go to Record... WriteRecord G[updateDB buttonClick buttonClick updateDB save the contents of the fields to the file helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Save Record button sends the updateDB message that notifies all of the recordFields to write their text to the current record. The updateDB message is handled by the page where the currentRecord is written to the database. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonClick \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends: \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 updateDB} helpMessage Jve Record NewRecord newRecord PupdateDisplay buttonClick buttonClick newRecord updateDisplay clear the fields and insert a blank record into the file helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The New Record button sends the newRecord message that is handled on the page. The newRecord handler on the page sends the clearField notification message which is handled by all of the recordFields, then it appends the blank record to the database. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonClick \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : newRecord and updateDisplay \par } helpMessage &New Record DeleteRecord deleteRecord PupdateDisplay buttonClick buttonClick deleteRecord updateDisplay delete the current record from the file helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Delete Record button sends the deleteRecord message that is handled on the paged followed by the updateDisplay notify message. The DLL function that actually deletes the record is placed in the page script for easy matainence. \par \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to handle\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : buttonClick \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 sends\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : deleteRecord and updateDisplay \par } helpMessage lete Record titlefield Front End to status currRecord totRecords currRecord totRecords totRecords currRecord *totalRecords WcurrentRecord updateDisplay currRecord totRecords value & " " notifyBefore updateDisplay currentRecord() totalRecords() displays the current record number and number of total records helpText {\rtf1 \ansi \deff0 {\fonttbl {\f0 \fswiss MS Sans Serif;}}{\colortbl \red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green0 \blue0 ;}{\stylesheet {\s0 \ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \cb0 \sbasedon0 \snext0 field text;}}\ql \fi0 \li0 \ri0 \sl0 \tx720 \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 The Stauts Field reprots the current record number and the number of total records in the Database. It is updated by the updateDisplay notification message. It uses \b0 \i \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 TO SET\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 and \b0 \i \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 TO GET\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 handlers to set and get the values of currentRecord and totalRecords so that if the message in the status field changed to "You are on record number 3 out of 5" so that currentRecord was word 6 instead of word 2 in the field, only the set handlers woul have to be changed, you would not have to track down every script on the page or background that set currentRecord.\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \par \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 \par This button contains the following handlers: \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 notifyBefore\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : updateDisplay \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to get\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentRecord, totalRecords \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 to set\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : currentReocrd, totalRecords \par \b \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf2 gets\b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 : \b0 \i0 \strike0 \f0 \fs20 \ulnone \up0 \dn0 \cf1 currentRecord and totalRecords of the page (see the page script)} helpMessage Record: 1 of 17777777777777 not set yet helpText updateDisplay &Save Record &Delete Record Progress Progress fullBar currentBar currentPercent 80%6969696969697% RecordCounter Record 4 of 57703773 partitions splash dBIII -><-ToolBook-><- Paradoxdoxxxxxx DBase Exchange ver. 3.0 1994 Asymetrix Corp. Importing dBase to ToolBook Use the "Import dBase to ToolBook" page or the "Import Paradox to ToolBook" page to access dBase or Paradox data in ToolBook. After you choose a database file, the field names appear in the "Select dBase (Paradox) Fields" listbox. Click the names of only the dBase or Paradox fields you want to import. Use the Select All Fields button if you want to import all the fields listed. You must have at least one field selected in order to import. By clicking Import to Record Fields, you create a new book with the same name as the original database, with all records imported as ToolBook record fields. The new book has one page for every record in the dBase file. By clicking Import to Front End, you create a new, untitled book that uses OpenScript for viewing and editing the database file. Importing dBase or Paradox to ToolBookk Import to Record Fields jumpPage Import to Front End jumpPage Import to Front End Import to Record Fields Import to Record Fields creates a new book in a second instance of ToolBook. The new book contains one background field and one record field for each dBase or Paradox field that was selected. The background field contains the name of the dBase or Paradox field, and the record field contains the data from the field. The new book has one page for each record in the dBase or Paradox file. To view each page, use the navigation buttons provided or the commands on the Page menu. ge menu. Import to Record Fields Import to Front End Import to Front End creates a new, untitled book in a second instance of ToolBook. The front end book contains 2 pages. The first page is for viewing dBase data. The second page is help for the front end. The front end page consists of controls for selecting records in the dBase file and ToolBook fields for both the dBase field names and the data. For help using the front end, see the help page that comes with that book.g Import to Front End Exporting ToolBook to dBase Use the "Export ToolBook to dBase" page to create a dBase file. Use the "Export ToolBook to Paradox" page to create a Paradox file. One record is created for each page of the background you are importing from. Choose a book to export. Because books often have title pages, ToolBook looks at the last page of the book first to verify that valid record fields exist on the background. Then it begins searching the book, starting on the first page of the background with record fields. To be valid, record fields must have unique names and must not be grouped. If your book does not have the data you want on the last page, edit the book by renumbering one of the background pages so that it becomes the last page of the book. If a book can be exported, its valid record fields are listed in the field labeled Select ToolBook Fields. Selecting ToolBook Fields Export jumpPage Exporting ToolBook to dBase or Paradox Selecting ToolBook Fields Export Click a field name in Select ToolBook Fields, then click the Add button to export the ToolBook field to a dBase or Paradox file.. When you select a ToolBook field, its name and text appear in View ToolBook Information. ToolBook tries to determine the dBase or Paradox field type from the text of the field. If you want to change the characteristics of a dBase or Paradox field, use the controls in Change dBase Field Characteristics or Paradox Field Characteristics.istics.. Selecting ToolBook Fields jumpPage jumpPage Paradox Field Char - Export Change dBase Field - Export Paradox Field Char - Export Change dBase Field - Export The controls in the Change dBase Field Characteristics section reflect the currently selected field in the dBase Fields listbox. If a dBase field is not selected, the controls are unavailable. Name: A dBase field name up to 10 characters long. The first character cannot be a number. Acceptible characters are: A...Z _ 0 1 2 3 4 5 6 7 8 9 Type: The dBase data type. Click one of the five radio buttons to change the data type. Width: The number of characters in the dBase field. The maximum width for fields of type Character is 254 and Numeric is 19. For other types, the width is predefined and cannot be changed. Decimal: For fields of type Numeric, the number of characters after the decimal point. The maximum value is 15. Decimal must be at least 2 less than the width of the field. For example, if Width is 8, the maximum decimal value you can set is 6. Date Format: The format used in the ToolBook record field. If no date format is set, sysDateFormat is used. If the text of the record field is a date but ToolBook guesses that it is a different format, change the data type to Date and choose the Date Format button to specify the correct format. If your book has many record fields containing dates that ToolBook does not recognize as dates, change sysDateFormat to match the format of the dates in the record fields. Change dBase Field Characteristics splash jumpPage jumpPage Paradox Field Char - Export Change dBase Field - Export Paradox Field Char - Export Change dBase Field - Export Import dBase Import Paradox Import Paradox DatabaseFields 06cleanUp enterPage closePXTable DBExchng DatabaseFields 06cleanUp leavePage button "selectAllFields", button "unselectAllFields", field "ParadoxFileName", field "DatabaseFields" button "ImportToRecordFields", button "ImportToFrontEnd" cleanUP --handlers functions }only on --If there some old stuff on , delete "DatabaseFields" <> cleanUp --Delete 4leaving closePXTable("DBExchng") reset fields buttons their initial state cleanUP ZvFieldList, vButtonList ""ParadoxFileName"", 4 = " B""selectAllFields"", B""unselectAllFields"","& \ B""ImportToRecordFields"", B""ImportToFrontEnd""" enabled FALSE select a Paradox file to import helpText Choose Paradox File... paradoxFileName Paradox file to import helpText Select Paradox Fields: DatabaseFields fieldButtons unselectAllFields buttonClick keyUp buttonClick selectedTextlines -- only enable them they are xalready enabled -- buttons grouped simplify B"unselectAllFields" "fieldButtons" FALSE KeySpace fields available to import helpText selectallFields Databasefields DatabaseFields buttonClick buttonClick ZLONG i ZSTACK vSelectedLines textlineCount( "DatabaseFields") selectedTextlines "Databasefields" select all of the listed fields to import helpText Select All Fields directions helpText Data in a Paradox file can be exchanged in two ways: 1. Import the Paradox database into record fields in a new book. 2. View and edit the Paradox database directly in a ToolBook front end. fieldButtons unselectallFields DatabaseFields buttonClick buttonClick selectedTextlines "DatabaseFields" unselect all of the listed fields to import helpText Unselect All Fields ImportToFrontEnd import the selected fields to a ToolBook front end helpText Import to Front End ImportToRecordFields import the selected fields to a ToolBook flat file database helpText Import to RecordFields script author reader author enterPage notifyBefore script for recordfields in front end helpText --notify handlers are used here to allow changing of the fields without --changing script anywhere else. Because the text of a recordfield lives --on the page and not the background we use words 1 to 3 of the unique name (self) --to refrence the text to set or get. notifyBefore updateDisplay set text of words 1 to 3 of self to fieldValue(my name) of this page notifyBefore updateDB set fieldValue(my name) of this page to text of words 1 to 3 of self notifyBefore clearFields clear text of words 1 to 3 of self set fieldValue(my name) of this page to null notifyBefore queryDBFields system databaseFieldList push self onto databaseFieldList author reader enterPage Export dBase )f-B0b2b4 14,23 selectChars TypeLabel Type: w, #b .&+ + ToolBook file (*.TBK), *.TBK npnameOnly 9listToolBookFields svLine toolbookfilename toolbookfields OpenFileDlg dbfields svTbName strPLChoosedBook buttonClick buttonClick 4STRING svTbName 4INT svLine !vName OpenFileDlg (strPLChoosedBook(),"", ".", "ToolBook file (*.TBK), *. ", 1) "toolbookfilename" [(nameOnly( listToolBookFields "dbfields" "toolbookfields" <> y-- will be error selectedTextlines enabled select a ToolBook book to export to a dBase file helpText Choose Book... ToolBookFileName ToolBook book to export to a dBase file helpText Build dBase File save the specified recordFields to a dBase file helpText Save As dBase... Select ToolBook Fields: ToolBookFields buttonClick buttonClick selectedTextlines recordFields on last background of the selected book helpText add_remove include recordField in export list helpText Add >> remove remove recordField from export list helpText Remove << Clear .&+ + pPresetDataView dateFormat dateFormat 9listToolBookFields svLine toolbookfields dbfields remove resetCharacteristics buttonClick buttonClick 4INT svLine = TRUE enabled FALSE listToolBookFields "dbfields" l = 0 selectedtextlines "toolbookfields" resetCharacteristics resetDataView dateFormat clear export list helpText Clear dBase Fields: Type' dbfields synch svLine buttonDown synch svLine field keyUp textScrolled +",H4 +",H4 +",H4 +",H4 w, /> +",H3 saveTBName svLine svBkName dWidth setCharacteristicsState dName dType setDataView dDecimal synch 4INT svLine <> selectedTextlines synch Z <> textScrolled {targetField 4STRING svBkName ZvName selectedTextLines = TRUE setCharacteristicsState "dType",\ "dWidth",\ "dDecimal",\ "dName" setDataView saveTBName = FALSE dName THREE VLOCALNUM VEXTENSION BILLINGCD NOTES saveTBName name for field in dBase file helpText dType dBase field type for recordField data helpText dWidth dBase field width for recordField data helpText dDecimal number of decimal digts if numeric field helpText b!T!\s viewLabel FALSE disabled View ToolBook Field Information +",H4 svLine 2DisAlNum dbFields dName keyChar strNameToLarge strNameNull strChar1Num isNum leaveField 4INT svLine ) > 9 (selectedTextState = isAlNum( a = 95 -- backspace "dName" selectedTextlines "dbFields" Key <> ZSTRING vError ) > 10 = strNameToLarge() > = strNameNull() isNum( f = strChar1Num() FALSE disabled name of field in dBase file helpText nameLabel FALSE disabled Name: l' (0( widthLabel FALSE disabled Width: width foo(FALSE) FALSE disabled disabled(FALSE) Width of selected dBase field helpText J#<#\s Character set field type to character helpText Character set field type to date helpText Logical set field type to logical helpText Logical )X,b, set field type to memo helpText Memo Numeric set field type to numeric helpText Numeric DateFormat w, /> +",H3 w, /> +",H3 dateFormat saveTBName strAskDateFormat svLine dateFormat dName strOK buttonClick buttonClick 4INT svLine (strAskDateFormat( Bsvline saveTBName dName) \ r= strOK() dateFormat -- Probably want use that every set the date format for the dBase file helpText Date Format... tbNamelabel darkGray strokeGraued FALSE disabled Name: TBRecordFieldName disabled name of ToolBook recordField helpText tbTextLabel FALSE disabled Text: TBRecordFieldText disabled contents of ToolBook recordField helpText DecimalLabel FALSE disabled Decimal: Decimal foo(FALSE) FALSE disabled disabled(FALSE) decimal precision of selected dBase field helpText changeLabel FALSE disabled Change dBase Field CharacteristicsText FrontEnd dBase browser X&H&{ X&H&{ first record first WcurrentRecord Failed PupdateDisplay buttonClick buttonClick currentRecord r<> "Failed" -- updateDisplay go to first record helpText Previous buttondown previous WcurrentRecord Failed PupdateDisplay buttonStillDown currentRecord r<> "Failed" -- updateDisplay go to previous record helpText buttonDown WcurrentRecord Failed PupdateDisplay buttonStillDown currentRecord r<> "Failed" -- updateDisplay go to next record helpText LastRecord WcurrentRecord Failed PupdateDisplay buttonClick buttonClick currentRecord "Last" r<> "Failed" -- updateDisplay go to last record helpText OpenIndexFile openIndex buttonClick buttonClick openIndex open an index file helpText Open Index File... goToRecord w, #? cancel WcurrentRecord *totalRecords fstrOutOfRange strEnterRec PupdateDisplay buttonClick buttonClick (strEnterRec() <> NULL r<> " (isType(INT, > 0) <= totalRecords()) currentRecord updateDisplay && strOutOfRange() go to a record by record number helpText Go to Record... findKey strEnterKey searchForKey PupdateDisplay buttonClick buttonClick (strEnterKey() searchForKey updateDisplay go to a record by key value helpText Find Key... WriteRecord G[updateDB buttonClick buttonClick updateDB save the contents of the fields to the file helpText Save Record NewRecord newRecord PupdateDisplay buttonClick buttonClick newRecord updateDisplay clear the fields and insert a blank record into the file helpText New Record DeleteRecord deleteRecord buttonClick buttonClick deleteRecord delete the current record from the file helpText Delete Record titlefield Front End to status currRecord totRecords currRecord totRecords totRecords currRecord *totalRecords WcurrentRecord updateDisplay currRecord totRecords value & " " notifyBefore updateDisplay currentRecord() totalRecords() displays the current record number and number of total records helpText Record: 0 of 07777777777777 SortCheck chooseIndex enableFields FALSE sortExpressionLabel currentKeyValue findKey svKey sortExpression 1deselectDBIndexfile currentKeyValueLabel buttonClick chooseIndex enableFields FALSE sortExpressionLabel currentKeyValue findKey svKey sortExpression currentKeyValueLabel vFieldList updateDisplay buttonClick 4svKey ZvFieldList combobox "chooseIndex" dropDownItems selectChange deselectDBIndexfile() enabled BfindKey = "sortExpressionLabel", "currentKeyValueLabel",\ 0", " enableFields( , FALSE, TRUE) notifyBefore updateDisplay l", " el",\ toggle the index on/off helpText Sort by Index sortExpressionLabel Sort Expression:Y sortExpression sortCheck kereadIndexExpression updateDisplay notifyBefore updateDisplay B"sortCheck" readIndexExpression() expression used to create current index file helpText CurrentKeyValueLabel Current Key Value:## ".$ currentKeyValue sortCheck readKeyValue updateDisplay notifyBefore updateDisplay B"sortCheck" readKeyValue() the value of the sort expression for the current record. helpText not set yet helpText sortbylabel Choose Index to Sort by:G&$ 4%J&B) chooseIndex PupdateDisplay enableFields sortExpressionLabel SortCheck gotodbRecord FindKey getDBRecordNumber svKey CurrentKeyValueLabel selectdbIndexFile selectChange selectChange 4svKey ZINT vRecordNumber ZvFieldList = getDBRecordNumber() selectdbIndexFile( gotodbRecord( S = "sortExpressionLabel", "CurrentKeyValueLabel" enableFields( , TRUE) B"SortCheck" enabled B"FindKey" updateDisplay select an index file helpText updateDisplay Paradox FrontendHelp HelpText You can view the records in the Paradox file by clicking the navigation buttons ( <<, <<, >>, and >> ) , clicking the Go To Record button, or clicking the Search button. To edit a Paradox field, change the text of the field and click Save Record. If you do not save the record, the next time you view it, the data for the field will be unchanged. Whenever you save, delete, or add a new record, only the primary index and any indexes created as "secondary maintained" are updated. Any non-maintained indexes are not updated. When a Table is opened all of the indexes for it are opened and the fields in the key are put in the combobox. Corrupted indexes are rebuilt. To select an index to sort by, choose the corresponding fields from the combobox. When you delete a record, the space it takes is not physically removed from the database until you choose Pack Database from the file menu. You should do this every once in a while to prevent the database files from becoming huge. subtitle Using the Front End .&+ +E default buttonClick buttonClick sysSuspendMessages = o= default FrontEnd exchangeHelp dBase FrontEndHelp HelpText You can view the records in the dBase file by clicking the navigation buttons ( <<, <<, >>, and >> ) , clicking the Go ToRecord button, or clicking the Find Key button. To edit a dBase field, change the text of the field and click Save Record. If you do not save the record, the next time you view it, the data for the field will be unchanged. Whenever you save, delete, or add a new record, you are warned that your index files can get out of date if they have not been opened. To stop the warning from appearing, choose Stop Index Warning from the dBase menu. Records can be sorted by index files if an index file is open. To open an index file, choose Open Index File button. If the sort options are grayed out, an index file has not been opened yet. When you delete a record, it is not physically removed from the file until you choose Pack Database from the dBase menu. nu. subtitle Using the Front End .&+ +E default buttonClick buttonClick sysSuspendMessages = o= default Selecting ToolBook Fields Export Progress Export dBase Export Paradox CDBFIL&File &Open Index File... Ctrl+O OpenIndex Open an Index file for the current database. &Close Index File... Ctrl+I CloseIndexFile Select an Index file to close. &Run... Run another application. E&xit Exit Database Frontend. &Edit Cu&t Ctrl+X Cut selected text from field. &Copy Ctrl+C Copy selected text to clipboard &Paste Ctrl+V Paste text from clipboard. Clear Del Clear field &Size to Page F11 SizeToPage Adjusts the application window to the current page size. Author F3 &dBase &Pack Database Ctrl+P Remove deleted records from database file. &Stop Index Warning &Help... helpForThisBook Get help for dBIII front end. &Save Ct&File Create, open, and manage files &Open... Ctrl+O &Save Ctrl+S Save &As... &Run... E&xit Alt+F4 &Edit Change pages, size the book, switch to author mode C&ut Ctrl+X &Copy Ctrl+C &Paste Ctrl+V C&lear Del &Next Alt+Right &Previous Alt+Left &Size to Page F11 &Author F3 &Help &dBase Exchange Help DbaseHelp &About dBase Exchange... AboutDbase &File &Pack Database Ctrl+P Remove deleted records from database file. &Run... Run another application. E&xit Exit Database Frontend. &Edit Cu&t Ctrl+X Cut selected text from field. &Copy Ctrl+C Copy selected text to clipboard &Paste Ctrl+V Paste text from clipboard. C&lear Del Clear field &Size to Page F11 SizeToPage Adjusts the application window to the current page size. &Author F3 &Help... helpForThisBook Get help for Paradox front end. will be pros Export Paradox +x2P4 30,34 selectChars TypeLabel Type: w, #b .&+ + ToolBook file (*.TBK), *.TBK npnameOnly 9listToolBookFields svLine toolbookfilename toolbookfields OpenFileDlg dbfields svTbName strPLChoosedBook buttonClick buttonClick 4STRING svTbName 4INT svLine !vName OpenFileDlg (strPLChoosedBook(),"", ".", "ToolBook file (*.TBK), *. ", 1) "toolbookfilename" [(nameOnly( listToolBookFields "dbfields" "toolbookfields" <> y-- will be error selectedTextlines enabled select a ToolBook book to export to a Paradox file helpText Choose Book... ToolBookFileName ToolBook book to export to a Paradox file helpText Build Paradox File save the specified recordFields to a Paradox file helpText Save As Paradox... Select ToolBook Fields: ToolBookFields recordFields on last background of the selected book helpText include recordField in export list helpText Add >> remove w, /> w, /> pPresetDataView saveTBName saveTBName clear toolbookFields dbFields dWidth resetCharacteristics dName dType svLine buttonClick buttonClick 4svLine ZvTBFieldName, vNextTextline = TRUE saveTBName "toolbookFields")+1 ] = 1 enabled selectedTextLines "dType" "dWidth" lines have been removed resetCharacteristics resetDataView FALSE Uhas o, change selectedtextlines "dbFields" " -- sync fields remove recordField from export list helpText Remove << Clear .&+ + pPresetDataView 9listToolBookFields svLine toolbookfields dbfields remove resetCharacteristics buttonClick buttonClick 4INT svLine = TRUE enabled FALSE listToolBookFields "dbfields" l = 0 selectedtextlines "toolbookfields" resetCharacteristics resetDataView clear export list helpText Clear Paradox Fields: Name1 viewLabel FALSE disabled View ToolBook Field Information tbNamelabel darkGray strokeGraued FALSE disabled Name: TBRecordFieldName disabled name of ToolBook recordField helpText dbFields synch svLine buttonDown synch svLine keyUp textScrolled +",H4 +",H4 +",H4 w, /> +",H3 saveTBName svLine svBkName dWidth setCharacteristicsState dName dType setDataView synch 4INT svLine <> selectedTextlines synch M <> textScrolled htargetField 4STRING svBkName ZvName 1 <> = selectedTextLines = TRUE setCharacteristicsState "dType",\ "dWidth",\ "dName" setDataView saveTBName = FALSE dName THREE saveTBName name for field in Paradox file helpText dType Paradox field type for recordField data helpText dWidth Paradox field width for certain types of recordField data helpText "h#$( +",H4 svLine 2DisAlNum dbFields dName keyChar strNameToLarge strNameNull strChar1Num isNum leaveField 4INT svLine ) > 24 (selectedTextState = isAlNum( e = 95 -- dash, no y constant! -- backspace "dName" selectedTextlines "dbFields" Key <> tabkey ZSTRING vError ) > 10 = strNameToLarge() > = strNameNull() isNum( f = strChar1Num() FALSE disabled name of field in Paradox file helpText nameLabel FALSE disabled Name: widthLabel FALSE disabled Width: width foo(FALSE) FALSE disabled disabled(FALSE) width of selected Paradox field helpText +",H4 +",H4 TBRecordFieldtext TBRecordFieldText vWidth svLine Alpha-Numeric dWidth setCharacteristicsState numeric dType svChecked buttonClick buttonClick 4INT svLine 4svChecked keeps me having figure out what there no change "Alpha-Numeric" "TBRecordFieldtext" vWidth Charcount ( "TBRecordFieldText") "numeric" "Memo" setCharacteristicsState "dWidth" "dType" + 020 Alpha-Numeric set field type to character helpText Alpha-numeric set field type to date helpText +j1v1 Numeric set field type to numeric helpText Numeric set field type to memo helpText Memo tbTextLabel FALSE disabled Text: TBRecordFieldText disabled contents of ToolBook recordField helpText changeLabel FALSE disabled Change Paradox Field Characteristics Change dBase Field - Export Import to Front End dBase FrontEndHelp Paradox FrontendHelp Paradox Field Char - Export Change dBase Field - Export Import to Front End Exporting ToolBook to dBase Import to Record Fields Importing dBase to ToolBook Exchange folder mytabheight myNumTabs myTabMode myTabSpace Folder tbk_wid_Name tabHeight numTabs tabMode tabSpace tbk_wid_props list,1,2,3,4,5,6 tbk_wid_values tabNode(FALSE) obtype tabHighlight tabLabel obtype tabHighlight tabLabel Intro goPage obtype tabHighlight tabLabel Export Paradox goPage Export to Paradox obtype tabHighlight tabLabel Export dBase goPage Export to dBase obtype tabHighlight tabLabel Import Paradox goPage Import Paradox obtype tabHighlight tabLabel Import dBase goPage Import dBase highlight import author reader import author enterPage notifyAfter notifyBefore CopyField templet for database fields helpText labelField templet for field labels helpText Label Field import author reader import author enterPage notifyAfter notifyBefore Cancel Indicate the key (recordField) on which you want to sort. buttonClick buttonClick sysRuntime ("Indicate the key ( J) on which you want r<> "Cancel" S&ort Search Cancel T"searchString field U"searchString s_dbExLastFocus Enter a string to search for buttonClick buttonClick 4s_dbExLastFocus ("Enter a osearchString r<> "Cancel" -- the rest allow -- even though getting thrown around caretLocation = = NULL r& ":" && &Search autoPageNumber enterPage What record do you want to go to? buttonClick notifyBefore buttonClick ("What record zyou want isType(INT, autoPageNumber tbk_wid_name tbk_wid_values AutoButtons import author reader import author enterPage notifyAfter notifyBefore AutoButtons tbk_wid_name First autoDisable Navigation button tbk_wid_name level direction disablePage tbk_wid_props list,background,book list,Next,Previous,First,Last tbk_wid_values background prop_level direction First prop_disablePage F&irst Previous :%b%OO autoDisable Navigation button tbk_wid_name level direction disablePage tbk_wid_props list,background,book list,Next,Previous,First,Last tbk_wid_values background prop_level direction First prop_disablePage P&revious < r&|& &&'OO 8'|'qp autoDisable Navigation button tbk_wid_name level direction disablePage tbk_wid_props list,background,book list,Next,Previous,First,Last tbk_wid_values background prop_level direction prop_disablePage &Next < 2(<( (<)qp P)f)\ autoDisable Navigation button tbk_wid_name level direction disablePage tbk_wid_props list,background,book list,First,Previous,Next,Last tbk_wid_values background prop_level direction prop_disablePage &Last enterPage reader author Exchange Import dBase 12,16 selectChars Record Field select a dBase file to import helpText Choose dBase File... dBaseFileName dBase file to import helpText Select dBase Fields:U DatabaseFields fieldButtons unselectAllFields buttonClick keyUp buttonClick selectedTextlines -- only enable them they are xalready enabled -- buttons grouped simplify B"unselectAllFields" "fieldButtons" FALSE KeySpace fields available to import helpText selectallFields databasefields databaseFields buttonClick buttonClick ZLONG i ZSTACK vSelectedLines textlineCount( "databaseFields") selectedTextlines "databasefields" select all of the listed fields to import helpText Select All Fields directions helpText Data in a dBase file can be exchanged in two ways: 1. Import the dBase data into record fields in a new book. 2. View and edit the dBase data directly in a ToolBook front end. fieldButtons unselectallFields dataBaseFields buttonClick buttonClick selectedTextlines "dataBaseFields" unselect all of the listed fields to import helpText Unselect All Fields ImportToFrontEnd import the selected fields to a ToolBook front end helpText Import to Front End ImportToRecordFields import the selected fields to a ToolBook flat file database helpText Import to RecordFields script author reader author enterPage notifyBefore script for recordfields in front end helpText --notify handlers are used here to allow changing of the field's without --changing script anywhere else. Because the text of a recordfield lives --on the page and not the background we use words 1 to 3 of the unique name (self) --to reference the text to set or get. notifyBefore updateDisplay set text of words 1 to 3 of self to fieldValue(my name) of this page notifyBefore updateDB set fieldValue(my name) of this page to text of words 1 to 3 of self notifyBefore clearFields clear text of words 1 to 3 of self set fieldValue(my name) of this page to null notifyBefore queryDBFields system databaseFieldList push self onto databaseFieldList author reader enterPage dBase browser Paradox Browser Paradox Field Characteristics Value(my name) of this page to null notifyBefore queryDBFields system databaseFieldList push self onto databaseFieldList author reader enterPage dBase browser BasefileName System Times New Roman System Arial Arial Arial Arial Arial MS Sans Serif System Times New Roman System MS Serif c:\mmtb\courses.dbf c:\jx\dbexchng\wfonedex.dbf Sans Serif radox\windows\wfonedex.dbf Arial Arial ansferring Data Progress DBEXCHANGE ields page id 21 iting Data to File page "Progress" page id 0 of book "C:\jx\dbexchng\courses.tbk" Transferring Data ields splash Page "splash" closeAllDBFiles toolbookfields dName 06cleanUp enterPage toolbookfields dName 06cleanUp leavePage pPresetDataView toolbookfileName toolbookFields dbFields resetCharacteristics add_remove cleanUp Decimal enableFields FALSE decimalLabel widthLabel nameLabel TypeLabel changeLabel dateFormat Width resetCharacteristics field "changeLabel", field "nameLabel", field "TypeLabel", svLine FALSE dbFieldName dbFieldType svChecked dbFieldDecimal dbFieldWidth vInactiveList vActiveList enableFields FALSE field "Width", field "DecimalLabel", field "Decimal" decimal Character vActiveList field "WidthLabel", field "name" Width field "DecimalLabel", field "Decimal" Numeric vInactiveList width DateFormat svChecked setCharacteristicsState ccutClear Clear ccutClear +",H4 dwidth decimal svline dbFields dname width dDecimal cutClear \Validate aMoveData p]BuildTag CreateFile buttonClick svInvalidCounter closeAllDBfiles strSelTBFields dName Validate createDBFieldTag /setDBFieldTag strTagErr wTinitProgressViewer Field Creating Record Definition Progress dWidth svdbName Numeric dName dType svTag currentItem strErrTag dDecimal BuildTag + , "j + , / + , # + , ! + , ! strdBnameExist npnameOnly JfreeDBfieldtag createDBfile strSavedBaseFile mm/dd/ccyy strNo setdBDateFormat svdbName strDBFileExists /strYes svTbName svTag 49strDBFileOpenError strOK openDBfile strDBFileCreationError CreateFile .&+ +E + , # +",!Y +",!Y ,%H.% stopDB DateFormat saveTBName -strErrSetDBF strTBrecordError svInvalidCounter vToolBookFieldName Record HwriteDBrecord wTinitProgressViewer strErrRefdbField currentItem Progress strErrDBFWrite strNoNameOrType dWidth mm/dd/y svTbName hstrTBErrorRef setDBFieldValue dName dType Numeric strErrNoDBF Writing Data to File dateFormat dDecimal MoveData svInvalidCounter qstrExportDone svdbName closeDBfile default stopDB toolbookfields dName 06cleanUp enterPage toolbookfields dName 06cleanUp leavePage pPresetDataView clear toolbookfileName toolbookFields dbFields remove resetCharacteristics cleanUp author strNotPage enableFields FALSE widthLabel nameLabel TypeLabel changeLabel Width resetCharacteristics enableFields FALSE Alpha-Numeric WidthLabel nameLabel TypeLabel Width changeLabel width svChecked setCharacteristicsState ccutClear Clear ccutClear +",H4 dwidth svline dbFields dname width cutClear (exitPX strdBnameExist getPXErrorString npnameOnly ?createPXTable dstrSavePXFile strSelTBFields amoveData strNo svdbName wTinitProgressViewer Field Creating Record Definition /strYes Progress Alpha-Numeric dWidth svTBName Numeric dName dType currentItem -initializePX strOK Setting extension to ".db" buttonClick .&+ +E + , # +",!Y ,%H.% hBlob dWidth GlobalAlloc stopDB pBlobData saveTBName -strErrSetDBF strTBrecordError strErrNoDBF GlobalLock strNoNameOrType setPXBlob vToolBookFieldName svInvalidCounter svdbName Record wTinitProgressViewer strErrRefdbField GlobalFree currentItem Progress openPXTable getPXErrorString svTbName hstrTBErrorRef GlobalUnlock dName dType yAppendPXrecord hBlobData Writing Data to File closePXBlob setPXFieldValue openPXBlobWrite moveData closePXTable svInvalidCounter qstrExportDone svdbName default stopDB `NV o OpenIndexFile StopIndexWarning PackDatabase HelpForThisBook Cannot open dBase file strCantOpenDbaseFile There are no records in this file. Please click New Record to enter data. strNoRecords then open this book again. Can't find tb30db3.dll. Please copy this file to a directory that's in your path, or change your path to include tb30db3.dll's directory, strNoDLL Please change the file position to a valid dBase record. You must be positioned on a record before it can be deleted. strInvalidRecord Are you sure you want to delete this record? strDeleteQuery strOK Cancel strCancel You have just deleted the last record in this file. A new blank record will be created. strDeleteLast modifying record strModifyRecord &dBase strdBase &Open Index File strOpenIndexFile &Pack Database strPackDataBase &Stop Index Warning strStopIndexWarning &Help For This Book strHelpForThisBook moving to strMoveTo getting next key value strGetNextKey deleting record strDelRec setting field value of field strSetFldValue getting field value of field strGetFldValue modifying record strModRec writing new record strWriteRec getting record count strGetRec getting record number strGetRecNum That record has been marked for deletion. strMarkDelete All records in Database are marked as deleted strAllMarked Unable to set record as the current record. Keeping current record. strKeepRecord navigating in dBase file strNavigate Only seven index files can be opened at once. strOnly7 Please choose the index file to open. strChooseIndex Open Index File strOpenIndex is already open strAlreadyOpen Index file cannot be opened. strCantOpen WARNING: ToolBook has detected corruption of your dBase file. strCorruptWarn Author strAuthor strExit w, #? Error encountered while getDBerrorString Error accessing dBase file strGeneralError Warning: If you alter a dBase file without opening its corresponding index files, the index files will not be updated. strWarning You are already on the first key. strFirstKey You are already on the first record. strFirstRec You are already on the last key. strLastKey You are already on the last record. strLastRec Enter record number to go to. strEnterRec positioning by record number strPosRec is not a valid record number. strNotValidRecNum Enter field to search in, or a number "x" to search the first "x" fields. strEnterField Enter data to search for. strEnterKey is out of range. strOutOfRange +49L, q1/rs 6pGJ7 getPXErrorString linkPX splash linkdBase s_firstFlag DBExchange -initializePX ]linkFile strRuntime enterApplication (exitPX leaveApplication s_firstFlag author reader reader Export export DBase ImportFromDbaseFile ExportToDbase export Paradox ExportToParadox import Paradox import Dbase ImportFromParadox menuItemSelected .&+ +E export importing dBase to Toolbook exchangeHelp exporting ToolBook to dBase svReturnPage default dBaseHelp splash aboutdBase tb30dos.dll fileExists getFileList tb30dlg.dll TB30DOS.DLL |strNoDll kernel OpenFileDlg saveAsDlg TB30DLG.DLL GlobalAlloc GlobalFree GlobalLock GlobalUnlock linkFile checkDBIndex closeAllDBFiles closeDBFile closeDBIndexFile createDBFieldTag createDBFile createDBIndexFile deleteDBFile deselectDBIndexFile findDBKey firstDBKey firstDBRecord freeDBFieldTag getDBDateFormat getDBErrorString getDBFieldCount getDBFieldName getDBFieldPrecision getDBFieldType getDBFieldValue getDBFieldWidth getDBFileName getDBIndexExpression getDBIndexFileName getDBKeyType getDBKeyValue getDBNavigateToDeleted getDBRecordCount getDBRecordDeleted getDBRecordNumber gotoDBRecord lastDBKey lastDBRecord nextDBKey nextDBRecord openDBFile openDBIndexFile packDBFile previousDBKey previousDBRecord reindexDBFile removeDBRecords selectDBFile selectDBIndexFile setDBDateFormat setDBFieldTag ,#T| setDBFieldValue setDBNavigateToDeleted setDBRecordDeleted writeDBRecord |strNoDLL tb30DB3.DLL Could not link to TB30db3.dll TB30DB3.DLL linkdBase addPXKey addPXPassword addPXTable appendPXRecord clonePXBlob ?oA-" closePXBitmapWindow @oA-" closePXBlob ,"TZ@oA-" closePXTable copyPXTable createPXTable decryptPXTable deletePXPassword deletePXRecord deletePXTable doesPXTableExist dropPXBlob @oA-" dropPXKey ,#T( oA-" emptyPXField emptyPXRecord emptyPXTable encryptPXTable exitPX freePXGraphicBlob BoA-" freePXGraphicBlobPalette BoA-" firstPXRecord getPXBitmapSize EoA.% getPXBlob EoA.% getPXBlobQuick FoA.% getPXBlobSize GoA.% getPXErrorString getPXFieldCount getPXFieldNames getPXFieldType getPXFieldValue getPXFileSize , U(HoA.% getPXGraphicBlob HoA.% getPXGraphicBlobPalette ,"U$JoA.% getPXKeyFieldCount getPXMaxFiles getPXMaxLocks getPXMaxTables getPXSwapSizeFromINI getPXMaxTablesFromINI getPXMaxFilesFromINI getPXMaxLocksFromINI getPXMemoBlob ,"UlKoAg getPXNetErrorUser getPXNetUserName getPXRaw getPXRawDataSize getPXRecordCount getPXRecordNumber getPXSortOrder getPXSwapSize getPXUserInfo gotoPXNetRecordLock gotoPXRecord initializePX insertPXRecord isPXNetRecordLocked , T,"oA-" isPXNetTableChanged "oA-" isPXTableProtected "oA-" lastPXRecord , Tp#oA-" lockPXNetFile $oA-" lockPXNetRecord , U@$oA.% lockPXNetTable $oA-" mapPXKey $oA.% nextPXRecord , Tx&oA-" openPXBitmapWindow KoA.% openPXBlobRead MoA.% openPXBlobWrite NoA.% openPXTable &oA-" packPXTable (oA-" previousPXRecord , Tx)oA-" queryPXKey )oAg refreshPXNetTable , T6,oA-" renamePXTable ,oA-" savePX ,oA-" searchPXField -oA-" searchPXKey -oA-" setPXBitmapWindowInfo PoA-" setPXBlob QoA-" setPXBlobFromFile RoA-" setPXFieldValue 1oA-" setPXGraphicBlob SoA-" setPXGraphicBlobFromFile RoA-" setPXINIMaxFiles 2oA-" setPXINIMaxLocks 2oA-" setPXINIMaxTables 2oA-" setPXMemoBlob WoA-" setPXRaw ,"Tf3oA-" setPXSortOrder 3oA-" setPXINISwapSize 4oA-" setPXTableCreateMode 4oA-" setPXTableMaxSize 4oA-" setPXUserInfo 4oA-" unlockPXNetFile 6oA-" unlockPXNetRecord ,"TF6oA-" unlockPXNetTable 6oA-" updatePXRecord 6oA-" upgradePXTable , T:7oA-" writePXBlobToFile XoA.% writePXGraphicBlobToFile XoA.% tb30PDX.DLL linkPX 1, "L ,!J/" ,!J`" ,!J@" FALSE isAlNum 1, "L ,!J@" ,!J`" FALSE isAlpha isNum isPosInt nameOnly strHelp Copyright (c) 1991 - 1994 -- Asymetrix Corporation dBaseIII (tm) - Paradox (tm) - ToolBook (tm) Exchange strAboutDbase Please close all other instances of ToolBook. strCloseInstances This application will only work with the full authoring ToolBook system. It will now close, please restart it using TB30.EXE strRuntime &dBase strdbf There was an error creating dBase file: strDBFileCreationError There was an error opening dBase file: strDBFileOpenError There is no current dBase file. Please select one. strErrNoDBF Error referencing dBase field: strErrRefdbField Error writing dBase record. strErrDBFWrite There was an error setting value of dBase field: strErrSetDBF Error creating dBase field tag. strErrTag FALSE There was an error running TB30.exe. strErrTbkExe field(s) with invalid data. Export completed: There were Export completed. strExportDone No dBase fields have been selected yet. strNoDBFFields . Please copy this file to a directory that's in your path, or change your path to include Can't find 's directory, then open this book again. strNoDLL Please select ToolBook fields for export. strSelTBFields Please enter a dBase file name. strSetDBName Error setting field tag for field strTagErr There was an error referencing book: strTBErrorRef Error referencing record field: strTBrecordError Please enter a valid dBase file name. strEnterDBfile File cannot be opened. Please enter a valid dBase file name. strNoOpenDBfile There is no name or type for one of the fields. Please set the values. strNoNameOrType Please select a dBase file name. strSeldBFileName Error listing fields for this dBase file. strErrListdBFile Please select a ToolBook file name. strSelTBKFileName No named, ungrouped record fields were found on the last page of this ToolBook file. strNoNameRecFfl Two or more record fields share the same name in this book. Please give all recordfields unique names. strTwoShareName There are no records in this dBase file. strNoRecIndBase Error getting the first record in this dBase file. strErrorFirstdBRec in record number Error getting value for field strErrorGetdBValue in record number Error setting value for record field strErrSetdBValue You are importing more fields than can be displayed on the page. You will have to arrange the fields after the book is built. strToManyFlds strOK Cancel strCancel Please choose the book to export. strPlChooseBook Choose Book strChooseBook Please choose the dBase file to import. strPlChooseDbase Choose dBase File strChoosedBase .dbf field. You have exceeded the size limits of a strFieldOverrun Decimal precision must be either zero or at least two less than the field width. strPrecisionError Enter the ToolBook date format of the text in record field strAskDateFormat Filename already exists. Replace it? strdBnameExist Save dBase file as: strSavedBaseFile Save Paradox file as: strSavePXFile Character width must be between 1 and 255. strCharWidth Numeric width must be between 1 and 19. strNumWidth Width cannot be blank. strWidthNull Decimal cannot be blank. strDecimalNull Decimal cannot be greater than 15. strDecimal15 A dBase field name can only be up to 10 characters. strNameToLarge A dBase field name cannot have a blank name. strNameNull A dBase field name cannot start with a number. strChar1Num This is not a functioning page for this book. It is used to build the front end. strNotPage strYes fields if you You can only build the new application with don't include label fields. Do you want to eliminate the label fields? strTooTooManyFields Please try again with less fields. You have selected more fields than this application can handle. strWayTooManyFields No label fields strNoLabels strNo xstrCantOpendBaseFile linkdBase tb30dlg.dll +!openFileDlg Frontend =QpDBasefileName openDBFile enterApplication first false currentRecord svKey setDBNavigateToDeleted PupdateDisplay checkError @noIndex enterPage exitDB leaveApplication checkDBIndex closeAllDBFiles closeDBFile closeDBIndexFile createDBFieldTag createDBFile createDBIndexFile deleteDBFile deselectDBIndexFile findDBKey firstDBKey firstDBRecord freeDBFieldTag getDBDateFormat getDBErrorString getDBFieldCount getDBFieldName getDBFieldPrecision getDBFieldType getDBFieldValue getDBFieldWidth getDBFileName getDBIndexExpression getDBIndexFileName getDBKeyType getDBKeyValue getDBNavigateToDeleted getDBRecordCount getDBRecordDeleted getDBRecordNumber gotoDBRecord lastDBKey lastDBRecord nextDBKey nextDBRecord openDBFile openDBIndexFile packDBFile previousDBKey previousDBRecord reindexDBFile removeDBRecords selectDBFile selectDBIndexFile setDBDateFormat setDBFieldTag setDBFieldValue setDBNavigateToDeleted setDBRecordDeleted writeDBRecord |strNoDLL tb30DB3.DLL linkdBase author yhelpText statusBar mouseEnter getDBRecordNumber currentRecord getDBRecordCount totalRecords getDBFieldValue checkError fieldValue KustrDataInvalid setDBFieldValue fieldValue 9FgetDBKeyValue checkError readKeyValue reading index Expression checkError getDBIndexExpression readIndexExpression strDelRec newRecord setDBrecordDeleted PupdateDisplay PupdateWarning checkError lastDBRecord CVstrDeleteLast getDBrecordDeleted strCancel strOK strDeleteQuery deleteRecord PupdateWarning strInvalidRecord HwriteDBrecord checkError strModRec getDBRecordDeleted updateDB clearFields strGetRec HwriteDBrecord strWriteRec getDBRecordCount svTotalRecords checkError newRecord ,%H.% chooseIndex sortCheck vIndexFile No index file is currently selected 1deselectDBIndexFile vIndexFiles No index files are open closeDBIndexFile @noIndex closeIndexFile chooseIndex sortCheck enableFields FALSE sortExpressionLabel currentKeyValue findKey sortbylabel SortExpression enableComboboxes currentKeyValueLabel vFieldList noIndex closeAllDBFiles exitDB w, #? chooseIndex npnameOnly lstrOnly7 enableFields Index file (*.NDX),*.NDX vFileName sortExpressionLabel sortCheck strAlreadyOpen strChooseIndex currentKeyValueLabel getBDErrorString getDBRecordNumber sortbylabel OpenFileDlg openDBIndexFile 1reindexDBFile gotoDBRecord enableComboboxes strCantOpen closeDBIndexFile FindKey vFieldList openIndex .&+ +E packdBFile first WcurrentRecord getDBErrorString PupdateDisplay default packDatabase stopIndexWarning checked stopIndexWarning dBase FrontEndHelp helpForThisBook strNavigate findDBKey checkError searchForKey strWarning stopIndexWarning strCancel strOK checked updateWarning nextDBrecord strFirstRec first DSstrKeepRecord svKey strLastRec nextDBkey WcurrentRecord firstDBkey currentRecord previous lastDBrecord isPositiveInteger "FfirstDBrecord `previousDBkey gotoDBRecord lastDBkey Failed previousDBrecord strAllMarked currentRecord strGeneralError strAuthor ZstrExit strauthor strCorruptWarn checkError false isPositiveInteger nameOnly R@TRUE Label I@enableFields I@enableComboboxes FrontEnd DBExchange frontEnd PXFrontEnd RecordCounter totalItems RecordCounter vProgress percentage currentItem ,!JdY currentPercent currentBar fullBar percentage RecordCounter ItemType RecordCounter totalItems RecordCounter currentItem currentPercent percentage %-tabNode FALSE J,tabMode enterPage }dBaseHelp goPage tablabel tabPressed tabname J,tabMode obtype tabNum buttonClick FALSE etabLimit Cannot set tab tabPressed myTabMode tabMode tabLimit myTabMode tabMode mytabheight tabHeight myTabHeight tabHeight arrangeTabs myTabSpace tabSpace myTabSpace tabSpace w, #? manual FALSE myNumTabs etabLimit Can only have Must have at least 1 tab arrangeTabs numTabs mynumtabs numTabs manual tabRef mynumTabs tabLabel tabHighlight tabHeight arrangeTabs myNumTabs obtype highlight mytabheight sized w, #> myTabMode tname myNumTabs mytabspace anchor arrangeTabs npnameOnly closeAllDBFiles selectAllFields listDatabaseFields dBIII file (*.dbf), *.dbf databaseFields getDBErrorString OpenFileDlg svdbName DBaseFilename DatabaseFields oRstrPLChooseDB openDBFile buttonClick .&+ +E .&+ +E strSeldBFileName strErrListdBFile DBfilename svdbName buildDBFieldList databasefields listDatabaseFields ,%H.% getDBFieldCount LgetDBFieldName buildDBFieldList .&+ +E sysSuspendMessages = TRUE;go to first page; send selectpage; send clear DBase FrontEndHelp npnameOnly DBase Browser databaseFields 06cleanUp FALSE ToolBook createDBBook FrontEnd databasefields activeWindow = windowHandle of viewer id 0 send enterApplication;send enterPage;send save strWayTooManyFields addDatabaseFields svdbName closeAlldBFiles strTooToomanyFields dataBaseFields >QpDBasefileName titleField Databasefields strCancel strNoLabels buttonClick getPXErrorString npnameOnly selectAllFields closePXTable Paradox database (*.db), *.db listDatabaseFields OpenFileDlg DBexchng openPXTable svdbName Paradoxfilename Choose a Paradox database to import. DatabaseFields buttonClick .&+ +E .&+ +E strSeldBFileName buildParadoxFieldList svdbName Paradoxfilename databasefields error checking for field names in Paradox File listDatabaseFields DBEXCHNG getPXFieldNames buildParadoxFieldList .&+ +E Paradox browser npnameOnly frontEnd DatabaseFields 06cleanUp FALSE ToolBook createDBBook PXFrontEnd sysSuspendMessages = TRUE;go to first page; send selectpage; send clear activeWindow = windowhandle of viewer id 0 send enterApplication;send enterPage;send save strWayTooManyFields addDatabaseFields svdbName strTooToomanyFields pParadoxFileName titleField Databasefields strCancel strNoLabels Paradox FrontEndHelp buttonClick w, /> +",H3 + , # V, #> V, #> +",H4 +",H4 +",H4 +",H4 vSourceBackground saveTBName saveTBName clear svLine vDecimal Field vWidth ToolBookFields setDataView dbFields dWidth remove svTbName dbfields ^qguessFieldInfo dName dType ucheckName dDecimal setCharacteristicsState buttonClick ,%H.% vName 2DisAlNum isNum checkName -", #> -", #> -", #> Character, Logical,1, Numeric, memo,10, mm/dd/yy isNum Date,8, guessFieldInfo w, /> w, /> pPresetDataView saveTBName saveTBName clear dDecimal toolbookFields dbFields dWidth resetCharacteristics dName dType svLine buttonClick +",H4 +",H4 +",H4 dwidth N+strCharWidth Decimal Z&strPrecisionError svLine Character dbFields dWidth Numeric 0123456789 strNumWidth svChecked keyChar w, #? N+strCharWidth decimal CstrWidthNull Character Numeric Decimal strNumWidth svChecked leaveField w, /> +",H3 w, /> +",H3 1, "Q +",H4 +",H4 +",H4 TBRecordFieldtext DateFormat dDecimal TBRecordFieldText vDecimal DateFormat vWidth svLine character dWidth setCharacteristicsState numeric dType logical svChecked buttonClick +",H4 +",H4 Z&strPrecisionError dDecimal svLine dbFields 0123456789 width strDecimal15 keyChar {strDecimalNull Z&strPrecisionError width strDecimal15 leaveField w, /> +",H3 + , # V, #> V, #> +",H4 +",H4 +",H4 vSourceBackground saveTBName saveTBName clear svLine vDecimal Field vWidth ToolBookFields setDataView dbFields dWidth remove svTbName dbfields ^qguessFieldInfo dName dType ucheckName setCharacteristicsState buttonClick ,%H.% vName 2DisAlNum isNum checkName -", #> Numeric,, Alpha-Numeric, memo,10, mm/dd/yy isNum Date,, guessFieldInfo +",H4 +",H4 +",H4 N+strCharWidth Decimal Z&strPrecisionError svLine Alpha-Numeric dbFields dWidth Numeric 0123456789 strNumWidth svChecked keyChar w, #? N+strCharWidth decimal CstrWidthNull Alpha-Numeric Numeric Decimal strNumWidth svChecked leaveField set syschangesdb to FALSE; send exit FALSE ToolBook createDBBook addDatabaseFields svdbName send save;send sizeToPage;activeWindow = windowhandle of viewer id 0;send reader ObtransferDatabaseData DatabaseFields buttonClick globallock hBlob XgetPXBlobSize getPXErrorString hPrivateBlob getPXFieldType bfirstPXRecord ToolBook getPXBlob Record set focus to null; select this page; send clear wTinitProgressViewer B F O G Progress DBexchng vCurrentField popenPXBlobRead Transferring Data globalUnlock getPXfieldvalue BLOB Field Ignored send newPage currentItem getPXRecordCount closePXBlob 8nextPXRecord progress transferDatabaseData FALSE send save;send sizeToPage;activeWindow = windowhandle of viewer id 0;send reader;send sizeToPage ToolBook createDBBook set sysChangesDB to FALSE; send exit addDatabaseFields svdbName ObtransferDatabaseData dataBaseFields buttonClick >strNoRecInPX curFld ToolBook Record set focus to null; select this page; send clear wTinitProgressViewer Progress getDBRecordCount nextDBRecord vCurrentField "FfirstDBRecord Transferring Data send newPage pGstrErrorFirstdBRec getDBfieldvalue currentItem getdbRecordDeleted CstrErrorGetdBValue transferDatabaseData default enterPage Label enableFields changeExtension totalItems |itemType Progress currentItem initProgressViewer yhelpText statusBar mouseEnter .&+ +E FALSE forward system s_dbExLastFocus tb30.exe ToolBook center rsstrNoDBFFields Choose name for new book if s_dbExLastFocus <> focus s_dbExLastFocus = focus ToolBook (*.TBK), *.TBK) save as end idle changeExtension , TRUE end if dataBaseFields saveAsDLG default to handle idle 7strErrTbkExe CreateDBBook ,%H.% First script Building DatabaseFields CopyField Previous wTinitProgressViewer Field FALSE currentItem Progress autoPageNumber ;lstrToManyFlds frontEnd Search Database Records labelField addDatabaseFields enableFields FALSE field "TBRecordFieldName", field "TBRecordFieldText" field "viewLabel", field "TBNameLabel", field "TBTextLabel", resetDataView TBRecordFieldName TBRecordFieldText enableFields field "viewLabel", field "TBNameLabel", field "TBTextLabel" vControlList setDataView .&+ +E 0\dupStrs strNoNameRecFfl vbuildRecordFieldList toolbookfilename toolbookFields svTbName strSelTBKFileName strTwoShareName default listToolBookFields + , # recordfield group svBkName svTbName buildRecordFieldList FALSE dupStrs dataBaseFields 06cleanUp enterPage svdbName closeDBFile dataBaseFields 06cleanUp leavePage previous button "selectAllFields", button "unselectAllFields", field "DBaseFileName", field "dataBaseFields" button "ImportToRecordFields", button "ImportToFrontEnd" cleanUP w, #? disablePage level page of this enterPage w, #? go to level page of this buttonClick prop_level invalid level for widget: background, book must be "background" or "book" level prop_level level First must be "Next", "Previous", "First", or "Last" invalid direction for widget: Next,Previous,First,Last disablePage direction direction prop_disablePage invalid disablePage: First, last must be "First" or "Last" disablePage prop_disablePage disablePage w, #? disablePage level page of this enterPage w, #? go to level page of this buttonClick prop_level invalid level for widget: background, book must be "background" or "book" level prop_level level First must be "Next", "Previous", "First", or "Last" invalid direction for widget: Next,Previous,First,Last disablePage direction direction prop_disablePage invalid disablePage: First, last must be "First" or "Last" disablePage prop_disablePage disablePage w, #? disablePage level page of this enterPage w, #? go to level page of this buttonClick prop_level invalid level for widget: background, book must be "background" or "book" level prop_level level First must be "Next", "Previous", "First", or "Last" invalid direction for widget: Next,Previous,First,Last disablePage direction direction prop_disablePage invalid disablePage: First, last must be "First" or "Last" disablePage prop_disablePage disablePage w, #? disablePage level page of this enterPage w, #? go to level page of this buttonClick prop_level invalid level for widget: background, book must be "background" or "book" level prop_level level First must be "Next", "Previous", "First", or "Last" invalid direction for widget: Next,Previous,First,Last disablePage direction direction prop_disablePage invalid disablePage: First, last must be "First" or "Last" disablePage prop_disablePage disablePage )npd*J queryPXKey getPXErrorString tb30dos.dll removeExtension getFileList database linkPX - PRIMARY <getPXKeyFieldCount getFileList filePath Paradox FrontEnd keyFields -initializePX indexArray openPXTable textlineToList GlobalLock GlobalUnlock GlobalFree frontEnd fieldNamesFromHandles chooseIndex kernel keyFieldCount PupdateDisplay OpenFileDlg textLineToList tb30DLG.DLL pParadoxfileName getPXFieldNames enterApplication (exitPX leaveApplication author yhelpText statusBar mouseEnter addPXKey addPXPassword addPXTable appendPXRecord clonePXBlob closePXBitmapWindow closePXBlob closePXTable copyPXTable createPXTable decryptPXTable deletePXPassword deletePXRecord deletePXTable doesPXTableExist dropPXBlob dropPXKey emptyPXField emptyPXRecord emptyPXTable encryptPXTable exitPX freePXGraphicBlob freePXGraphicBlobPalette firstPXRecord getPXBitmapSize getPXBlob getPXBlobQuick getPXBlobSize ,"UdexA.% getPXErrorString getPXFieldCount getPXFieldNames , Uer getPXFieldType , U+!M getPXFieldValue , U, getPXFileSize , ULine.% getPXGraphicBlob ,"Utb30.% getPXGraphicBlobPalette getPXKeyFieldCount getPXMaxFiles getPXMaxLocks tb3-" getPXMaxTables T.dll-" getPXSwapSizeFromINI getPXMaxTablesFromINI getPXMaxFilesFromINI getPXMaxLocksFromINI ,#T-" getPXMemoBlob getPXNetErrorUser getPXNetUserName getPXRaw getPXRawDataSize getPXRecordCount Par.% getPXRecordNumber , Uront.% getPXSortOrder getPXSwapSize getPXUserInfo gotoPXNetRecordLock gotoPXRecord ,%Tarad-" initializePX insertPXRecord , Tdata-" isPXNetRecordLocked , Tbase-" isPXNetTableChanged , Topen-" isPXTableProtected lastPXRecord lockPXNetFile lockPXNetRecord lockPXNetTable mapPXKey nextPXRecord openPXBitmapWindow , U.X??.% openPXBlobRead , UgetF.% openPXBlobWrite ,"UineT.% openPXTable packPXTable previousPXRecord , Tabas-" queryPXKey refreshPXNetTable renamePXTable , TldCo-" savePX searchPXField searchPXKey setPXBitmapWindowInfo setPXBlob setPXBlobFromFile setPXFieldValue setPXGraphicBlob dat-" setPXGraphicBlobFromFile setPXINIMaxFiles ,"Tield-" setPXINIMaxLocks setPXINIMaxTables setPXMemoBlob , Tchoo-" setPXRaw setPXSortOrder setPXINISwapSize ,"TeInd-" setPXTableCreateMode setPXTableMaxSize setPXUserInfo unlockPXNetFile unlockPXNetRecord unlockPXNetTable updatePXRecord upgradePXTable writePXBlobToFile writePXGraphicBlobToFile ,"Undex.% tb30PDX.DLL linkPX getPXRecordNumber database currentRecord database getPXRecordCount totalRecords getPXErrorString hPrivateBlob retVal getPXfieldvalue B F O G getPXFieldType popenPXBlobRead LgetPXMemoBlob database closePXBlob fieldValue hBlob setPXFieldValue openPXBlobWrite VsetPXMemoBlob B F O G getPXFieldType getPXErrorString database closePXBlob fieldValue tdeletePXRecord database strCancel strOK strDeleteQuery deleteRecord getPXErrorString updatePXRecord database updateDB getPXErrorString clearFields yappendPXRecord database newRecord .&+ +E getPXErrorString packPXTable Please close other applications using this database try packing it again. database PupdateDisplay default packDatabase Paradox FrontendHelp HelpForThisBook Record not found, navigating to closest record. getPXErrorString SUCCESS iemptyPXRecord setPXFieldValue <searchPXField retVal searchPXKey database Record not found. searchTable getPXErrorString first previousPXRecord previous .lastPXRecord bfirstPXRecord isPositiveInteger _2gotoPXRecord database 8nextPXRecord currentRecord false isPositiveInteger nameOnly removeExtension database getPXFieldNames fieldNamesFromhandles -- Set the thermometer bar -- Note that uses " property. totalItems pNumberItems isType(real, > 0) "RecordCounter" currentPage currentItem pItemNumber ZvNumberItems > >= 0 N <= vProgress v)*100 percentage pPercentage -- errror checking: + > 100 I < 0 %"##0" "currentPercent" lWide "fullBar" "currentBar" / 100) ItemType pItemType notifyBefore otabMode(FALSE) otabNode( -- This message sent clicked changed Hsetting Put code handler, -- on tabPressed tabNum --special help B"tablabel" dBaseHelp goPage currentPage -- handles clicking on buttonClick -- test 9was Hchecking "obtype" userProperty -- each named " ", N being tabname -- Changes which 9folder front. It does Hmoving U"mask" -- Value zbetween 1 tabs navigate value < 1 > tabLimit() "Cannot 9" && -- moves visually -- appear See sized below adiagram v + xpix(), -- stores a userproperty myTabMode -- sends notification -- The handlers resizing ,mode. -- -- Used %a constant. Returns -- Note: you wish more , follow procedure: -- Go duplicate one -- Rename that 9appropriately. ( instance would -- be Tab7", thirteenth # be "Tab13"). -- Set its behind function reflect pageUnits given n pixels. sysPageUnitsPerPixel * n ypix n Uel * n -- returns currently selected -- sets up height units. tabHeight mytabheight handled myTabHeight tabSpace myTabSpace arrangeTabs numTabs valid parameter "Must have )least 1 "Can only /" && && " -- cache {reference optimization. 9"&i) i <= -- hidden %they've xbeen -- receiving them # are "manual" myNumTabs mynumtabs resized Notice -- methodSent: used differentiate =messages ToolBook explicitly sysSuspendMessages off toolbooks messaging, %we will be changing stuff. Without recursively -- calls itself over -- thing -- has a called -- -- 5,6 _________ 7,8 -- -- 3,4 | | 9,10 -- -- -- -- 1,2 |____________| 11,12 -- -- Here amap -- goal here maintain shape -- . (Otherwise gets stretchy.) Also, -- should be -- -- find how tall supposed -- tabRef -- tsection makes " corners -- Need be sure -- wide 4doing m"tabHighlight" B"tabLabel" K () editor. -- rectangular -- body -- -- following condition triggered %a whole -- -- -- , even though their sizes So we must -- can themselves. -- -- xarranged -- 9"&i) -- don't bother arranging -- mynumTabs -- assures aligned spaced evenly. syssuspendmessages anchor "tab1" mytabspace where order xpos bp - b(ts,0) through remaining place -- 9"&i) -- -- now tbit masking others. bchecks x(e.g., just moved tname above buttonClick 4STRING svdbName vName OpenFileDlg ("Choose a Paradox database .","", ".", " (*.db), *.db", 1) closePXTable("DBexchng") openPXTable(" , 0, 0) getPXErrorString( "Paradoxfilename" nameOnly( listDatabaseFields " selectedTextLines enabled B"selectAllFields" --builds displays a names fieldName vdbFieldList strSeldBFileName() the O = buildParadoxFieldList() no fields found, error checking "databasefields" a given vPXFieldList = getPXFieldNames("DBEXCHNG") ~(",", ~(",", buttonClick 4INT svLine 4STRING bkName, svTbName ZvSelectedLine, vToolBookFieldName, vName, vType, vFieldData = TRUE textlineCount( selected toolbook record = selectedTextLines "ToolBookFields" saveTBName vSourceBackground = enabled FALSE selectedtextlines -- Guess dBase type guessFieldInfo( vWidth = vDecimal = -- fill fields = checkName( pwere numbers "&"_"&( ")+1) -- can't have duplicat names --So we will aup our own that should be unique ) < 10 ")+1) "dType" "dWidth" "dDecimal" textoverFlow " <> 0 "dbFields" ")+1) selectedTextlines "dbfields" --Update panels display information about the currently setDataView setCharacteristicsState nameString ZvNewName --strip begining cisNum( i = " " xisAlNum( i = 10 , width, tbased on vFieldWidth, --Check : <> %"mm/dd/yy" "Date,8, " logical = 1 = 0 = "t" = "f" "Logical,1, " numeric < 18 --look point ~(".", "Numeric,"& &","& memo, more than 32 V, gruess ^length > 32 C10, " -- default ot &", " buttonClick 4svLine ZvTBFieldName, vNextTextline = TRUE saveTBName "toolbookFields")+1 ] = 1 enabled selectedTextLines "dType" "dWidth" "dDecimal" lines have been removed resetCharacteristics resetDataView FALSE Uhas p, change selectedtextlines "dbFields" " -- sync fields 4svChecked 4INT svLine "0123456789" -- backSpace Key = keyEnter -- enter zerrorChecking they tabbed Bsvline "dwidth" "Character" <= 255 "dWidth" selectedtextlines "dbFields" strCharWidth() "Numeric" <= 19 "Decimal") < 2 <> 0 strPrecisionError() selectedTextlines strNumWidth( ZvError -- need deleting pasting &&strWidthNull() > 255 < 1 t" <> 0 ) - ( buttonClick 4INT svLine 4svChecked keeps me having figure out what there no change vDecimal "TBRecordFieldtext" vWidth Charcount ( "TBRecordFieldText") "numeric" "Memo" "logical" DateFormat setCharacteristicsState "dWidth" "dDecimal" "dType" 4INT svLine (key) "0123456789" C = keyEnter -- enter zerrorChecking z <> they tabbed backspaced "width")-( ) < 2 strPrecisionError() strDecimal15() "dDecimal" selectedTextlines "dbFields" ZSTRING vError -- need deleting pasting 9 = strDecimalNull() ) < 2 --handlers used }only on -- cleaning up slows flipping so necessary -- you have 8was saved "toolbookfields" <> "dName" <> cleanUp --Just be sure. --This initializes the qsession. = TRUE 0two panels resetCharacteristics resetDataView --initalize rest controls on enabled FALSE "toolbookFields" "toolbookfileName" "dbFields" keep navigating frontend template progress sysSuspendMessages strNotPage() labels characteristics ZvControlList "TypeLabel", "changeLabel",\ "nameLabel", "widthLabel", "Width" enableFields( "type" sets state so that valid selected. --Parameters: -- dbFieldType: -- dbFieldWidth: qvalue -- dbFieldDecimal: -- dbFieldName: setCharacteristicsState 4svLine, svChecked ZSTRING vActiveList, vInactiveList <> NULL "WidthLabel", = "Alpha-Numeric" --These updated being edited ? messages handled here Clear cutClear 4INT svline ("d"& selectedtextlines "dname" <> "dwidth" <> buttonClick 4INT svLine 4STRING bkName, svTbName ZvSelectedLine, vToolBookFieldName, vName, vType, vFieldData = TRUE textlineCount( selected toolbook record = selectedTextLines "ToolBookFields" saveTBName vSourceBackground = enabled FALSE selectedtextlines -- Guess Paradox type guessFieldInfo( vWidth = vDecimal = -- fill fields ^ dBase = checkName( pwere numbers "&"_"&( ")+1) -- can't have duplicat names --So we will aup our own that should be unique ) < 10 ")+1) "dType" "dWidth" textoverFlow " <> 0 "dbFields" ")+1) selectedTextlines "dbfields" --Update panels display information about the currently setDataView setCharacteristicsState nameString ZvNewName --strip begining cisNum( i = " " xisAlNum( i = 25 , width, tbased on vFieldWidth, --Check : <> %"mm/dd/yy" "Date,, " numeric "Numeric,," memo, more than 32 ^length > 255 A10, " -- default "Alpha- &", " 4svChecked 4INT svLine "0123456789" -- backSpace Key = keyEnter -- enter zerrorChecking they tabbed Bsvline "dWidth" "Alpha-Numeric" <= 255 selectedtextlines "dbFields" strCharWidth() -- This will never happen, leaving user wants modify -- See "type" "Export dBase" <= 19 "Decimal") < 2 <> 0 strPrecisionError() selectedTextlines strNumWidth( ZvError -- need deleting pasting &&strWidthNull() > 255 < 1 -- These t" <> 0 ) - ( buttonClick 4STRING svdbName ZvNewBookName, vTotalRecords --Create the + = createDBBook( will FALSE there are no fields selected, -- returns NULL `user backs out error --Add addDatabaseFields 30, 135, 5430, " --Do transfer = transferDatabaseData(" ToolBook \;activeWindow = windowhandle handler fParadox record data. Assumes that 8context already ta sourceField, newBookName , vSourceDBFields, vSelectedDBFields, vTotalFields, vCurrentRecord selectedTextLines zlead firstPXRecord("DBexchng") getPXErrorString( initProgressViewer "Transferring ", getPXRecordCount(" --loop thru file filling cTRUE currentItem within value vCurrentField = --Check a blob getPXFieldType(" "B F O G" --If a memo xignore hPrivateBlob = openPXBlobRead(" close "progress" hBlob = getPXBlob( t, getPXBlobSize( ), 0) globallock( temp = 1(0, globalUnlock(hblob) closePXBlob( getPXfieldvalue(" "BLOB Ignored" -- nextPXRecord(" --Kill since has no recordFields buttonClick 4STRING svdbName ZvNewBookName, vTotalRecords -- Create the , = createDBBook( will FALSE there are no fields selected, -- returns NULL `user backs out error -- Add d. The numbers initialize positions limits addDatabaseFields 30, 135, 5175, "dataBaseFields", -- Do transfer = transferDatabaseData(" ToolBook \;activeWindow = windowhandle handler fdBase record . Assumes that 8context already ta sourceField, newBookName , vSourceDBFields, vSelectedDBFields, vTotalFields, vCurrentRecord selectedTextLines zlead firstDBRecord() = -10 strNoRecInPX() strErrorFirstdBRec() initProgressViewer "Transferring ", getDBRecordCount(), " --loop thru PX file filling cTRUE getdbRecordDeleted() = 0 --bypass deleted currentItem within value vCurrentField getDBfieldvalue( strErrorGetdBValue(curFld, nextDBRecord() --Kill since has no recordFields close --handlers common backgound that share --reset cursor here because might xbe done on o= default -- A "disable" fields. -- Makes scripts read like there a custom enabled/disabled -- property --Parameters: -- fieldList: a list -- enableField: a boolean flag determine whether -- clearText: a disabling -- This function works recordFields enableFields ) > 0 c"Label" BLACK WHITE FALSE LIGHTGRAY Qthe three Sextension a file specified -- fileName: filename change, may include path -- newExtension: changeExtension k <> "." JCharacter opens progress initializes --values. 8displays named " -- newCaption: -- newTotalItems: be "counted" -- newItemType: `label kind being initProgressViewer itemType currentItem totalItems statusBar helpText --Function create a accept data called ;"Import RecordFields" FrontEnd" -- dbFileName: CreateDBBook ZvNewBookName, vStartup, vStartupSysBooks sure selectedTextlines "dataBaseFields" strNoDBFFields() base = saveAsDLG("Choose F"), ".", "ToolBook (*. ^), *. e)", 1) -- Save L.ini, finstance -- will be blank, sysToolBookDirectory & "tb30.exe" minimized strErrTbkExe() same database %" && QUOTE & defaultPosition feature " & CRLF \ & TAB & " 4s_dbExLastFocus" & importing -- startColumn: sepcifies Sside created pageUnits -- startRow: specifies -- endRow: <limit -- dbFieldList: where dbFields imported are : a used ither buttons. addDatabaseFields , Labels ZSTACK vSelectedText ZINT vTotalFields,vColumnCounter, vRowCoords, vColumnCoords ZSTRING vFieldName, vLabelField, vRecordField ZLAYER vDestinationLayer, vDestinationBackground "Building --preset coordinates, incrementors color/ %build frontend Records" /"frontEnd" --loop thru building names order those -- defaults ]labels, a very large z(>47) per insert = copyObject( "labelField" J"CopyField" +1350, u = adjust drawing -- "285", "105", "3930" *happen look good. H285 I'm about ~below lowest bound how many times I --begin a column k2 = 1 --alternate between these cases 3930 + ( *105) + (( -1)*105) strToManyFlds() -- placed g correct B"Sort" B"Search" "autoPageNumber" B"First" B"Previous" B"Next" close state view panel resetDataView ZvControlList ""viewLabel"", ""TBNameLabel"", ""TBTextLabel"","&&\ ""TBRecordFieldName"", ""TBRecordFieldText""" sets --controls -- toolBookFieldName: -- toolBookBackgroundRef: /(includes 8ref) we can find Jpassed parameter builds listToolBookFields svTbName RecordFieldNames strSelTBKFileName() vRecordFieldNames = buildRecordFieldList() found strNoNameRecFfl() "toolbookfilename" "toolbookFields" duplicate dupStrs( strTwoShareName() actual , svBkName bgObjects CharsInList vbgObjects = *) > 0 --test recordfields WITH NAMES vRecordFieldList vCharsInList = Q) -- stop &<> 0 2- 1) M- 1) checks strings multiple strs ZLONG i, j i <> j --Dummy handlers intercepting cmessages xon Front End OpenIndexFile StopIndexWarning PackDatabase HelpForThisBook --Functions strings easy Internationalization strCantOpenDbaseFile fFileName "Cannot dBase file" && # & "." strNoRecords "There are no Please click New enter data." strNoDLL 't find tb30db3.dll. Kopy a directory" && \ "that's your path, change include >," && \ strInvalidRecord Mthe record. You must be positioned on a can be deleted." strDeleteQuery "Are sure want strOK strCancel strDeleteLast have just ." && \ " A qblank will be created." strModifyRecord "modifying strdBase strOpenIndexFile strPackDataBase strStopIndexWarning strHelpForThisBook strMoveTo "moving strGetNextKey "getting tkey value" strDelRec "deleting strSetFldValue "setting strGetFldValue strModRec strWriteRec "writing strGetRec count" strGetRecNum strMarkDelete "That has been marked deletion." strAllMarked strKeepRecord "Unable " && && " current Keeping strNavigate "navigating strOnly7 seven index files opened )once." strChooseIndex strAlreadyOpen already vName && "cannot be strCorruptWarn "WARNING: ToolBook detected corruption strAuthor strExit strGeneralError fErrorValue, fErrorText temp $accessing 0 <> NULL ":" && getDBerrorString( X <> CRLF & " encountered c" && & "." strWarning : If you alter a without opening" && \ "its corresponding xbe updated." strFirstKey key." strFirstRec strLastKey strLastRec strEnterRec strPosRec "positioning strNotValidRecNum strEnterField z""x"" ""x"" fields." strEnterKey strOutOfRange f range." --handlers functions }only on --If there some old stuff on , delete "dataBaseFields" <> cleanUp 4STRING svdbName --Delete 4leaving closeDBFile( -- why isn't skipNavigation taking care reset the fields buttons their initial state cleanUP ZvFieldList, vButtonList ""DBaseFileName"", 2 = " B""selectAllFields"", B""unselectAllFields"","& \ B""ImportToRecordFields"", B""ImportToFrontEnd""" enabled FALSE notifyBefore odisablePage && " " && olevel) oenabled FALSE buttonClick " && value oprop_level "invalid widget:"&& G &CRLF&\ "must be "" direction "Next,Previous,First,Last" "", "" "", "" oprop_disablePage :" && & CLRF & \ Asymetrix dBase - Paradox - ToolBook Exchange 1991 - 1994 BCorporation --Copyright 1991-1994 --This version authored HJeff Ayars Charles Hiestand gives you permission e, revise reuse the individual scripts your own applications. --You may x, however, Sentire a substantial part redistribution jproduct. retains copyright on original elements . Include notice "Portions are they contain copied --A note on language independence: For ease translating strings readers that come functions located --The names these letters: " handlers prompt enterApplication housekeeping leaveApplication clean up per ImportdBase option ExportdBase dBaseHelp help linkFile tb30DOS.dll linkdBase ( tb30db3. User defined isAlNum test alphaNumeric isNum numeric isAlpha alphabetic isPosInt positive integer -- nameOnly prefix file ponly. 4s_firstFlag sysChangesdb FALSE sysRuntime strRuntime() "splash" linkPX initializePX("DBExchange") < 0 -- SHARE.EXE xrunning, error will occur here getPXErrorString( \ -- eon screen close exitPX() asure centered --(sometimes 640 X 480 there a problem) saveChanges have switched ,mode. custom calias messages menuItemSelected , menuAlias "ImportFromDbaseFile" "ExportToDbase" DBase" "ImportFromParadox" "ExportToParadox" 4STRING svReturnPage -- Do xwant because user sysSuspendMessages = -- Do xmodify already /<> "exchangeHelp" "exporting "importing Toolbook" o= default -- needed syssuspendmessages aboutdBase strAboutDbase() DLL used linkDLL sysToolBookDirectory & "tb30dos. fileExists( getFileList( strNoDll ("TB30DOS. OpenFileDlg( aveAsDlg( "kernel" WORD GlobalAlloc( ,DWORD) Free( POINTER GlobalLock( ;Unlock( y & "tb30DB3.DLL" _ checkDBIndex( v closeAllDBFiles() closeDBFile( closeDBIndexFile( createDBFieldTag( createDBFile( createDBIndexFile( INT deleteDBFile( selectDBIndexFile() -findDBKey( @firstDBKey() QfirstDBRecord() efreeDBFieldTag( getDBDateFormat() getDBErrorString( getDBFieldCount() getDBFieldName( getDBFieldPrecision( getDBFieldType( getDBFieldValue( getDBFieldWidth( getDBFileName() getDBIndexExpression() getDBIndexFileName() getDBKeyType() getDBKeyValue() getDBNavigateToDeleted() LONG getDBRecordCount() getDBRecordDeleted() 1Number() gotoDBRecord( lastDBKey() lastDBRecord() nextDBKey() nextDBRecord() openDBFile( openDBIndexFile( packDBFile() previousDBKey() previousDBRecord() reindexDBFile( removeDBRecords( selectDBFile( setDBDateFormat( setDBFieldTag( setDBFieldValue( setDBNavigateToDeleted(INT) setDBRecordDeleted( writeDBRecord( "Could TB30db3.dll" strNoDLL("TB30DB3. linked, addPXKey( --PXKeyAdd() addPXPassword( --PXPswAdd() addPXTable( --PXTblAdd() appendPXRecord( --PXRecAppend() clonePXBlob( --PXBlobClone() closePXBitmapWindow( closePXBlob(INT, --PXBlobClose() closePXTable( --PXTblClose() copyPXTable( --PXTblCopy() createPXTable( ) --PXTblCreate() cryptPXTable( --PXTblDecrypt() --PXPswDel() --PXRecDelete() --PXTblDelete() oesPXTableExist( --PXTblExist() ropPXBlob( --PXBlobDrop() ropPXKey( --PXKeyDrop() emptyPXField( emptyPXRecord( --PXRecBufEmpty() emptyPXTable( --PXTblEmpty() encryptPXTable( ) --PXTblEncrypt() --PXExit() freePXGraphicBlob( freePXGraphicBlobPalette( firstPXRecord( --PXRecFirst() PXBitmapSize( --PXBlobGet() PXBlobQuick( --PXBlobQuickGet() PXBlobSize( --PXBlobGetSize() getPXFieldCount( --PXRecNFlds() getPXFieldNames( getPXFieldType( ) --PXFldType() getPXFieldValue( PXFileSize( getPXKeyFieldCount( --PXKeyNFlds() getPXMaxFiles() getPXMaxLocks() getPXMaxTables() INT getPXSwapSizeFromINI() MaxTablesFromINI() 1MaxFilesFromINI() GMaxLocksFromINI() getPXMemoBlob( getPXNetErrorUser() --PXNetErrUser() getPXNetUserName() PXRaw( --PXRawGet() getPXRawDataSize( J PXRecordCount( --PXTblNRecs() s PXRecordNumber( --PXRecNum() getPXSortOrder() getPXUserInfo() gotoPXNetRecordLock( --PXNetRecGotoLock() gotoPXRecord( --PXRecGoto() --PXWinInit() insertPXRecord( --PXRecInsert() isPXNetRecordLocked( --PXNetRecLocked() isPXNetTableChanged( --PXNetTblChanged() isPXTableProtected( --PXTblProtected() lastPXRecord( --PXRecLast() lockPXNetFile( --PXNetFileLock() lockPXNetRecord( lockPXNetTable( --PXNetTblLock() mapPXKey( --PXKeyMap() nextPXRecord( --PXRecNext() openPXBitmapWindow( openPXBlobRead( ) --PXBlobOpenRead() openPXBlobWrite( --PXBlobOpenWrite() openPXTable( --PXTblOpen() packPXTable( previousPXRecord( --PXRecPrev() queryPXKey( --PXKeyQuery() refreshPXNetTable( --PXNetTblRefresh() renamePXTable( ) --PXTblRename() savePX() --PXSave() searchPXField( searchPXKey( --PXSrchKey() setPXBitmapWindowInfo( setPXBlob( --PXBlobPut() setPXBlobFromFile( setPXFieldValue( ) --PXPutAlpha(), PXPutDate(), PXPutDouble(), PXPutLong(), PXPutShort() setPXGraphicBlob( -- setPXGraphicBlobFromFile( setPXINIMaxFiles( --PXSetDefaults() setPXINIMaxLocks( setPXINIMaxTables( setPXMemoBlob( setPXRaw( --PXRawPut() setPXSortOrder( setPXINISwapSize( setPXTableCreateMode( --PXTblCreateMode() setPXTableMaxSize( --PXTblMaxSize() setPXUserInfo( unlockPXNetFile( --PXNetFileUnlock() unlockPXNetRecord( --PXNetRecUnlock() unlockPXNetTable( --PXNetTblUnlock() updatePXRecord( --PXRecUpdate() upgradePXTable( --PXTblUpgrade() writePXBlobToFile( writePXGraphicBlobToFile( --Functions support data validation checking -- We ANSI each -- See C-4 (appendix C) Manual. <= 47) >= 91 <= 96) >= 58 <= 64) <= 64) >= 91 <= 96) > 127) -- Instead replacing call !1.5 been rewritten q3.0 functionality. isType(REAL, --boolean J >= 0) just a fully qualified path fFile vOffset ~("\", ~("\", strHelp -- debug: better "dBaseIII (tm) - T#(tm) - T#(tm) /#(c) 1991 - 1994 -- strCloseInstances "Please other instances authoring 4. It , please restart .EXE" strdbf strDBFileCreationError fName "There was creating :" && strDBFileOpenError opening S :" && strErrNoDBF no current one." strErrRefdbField fField referencing strErrDBFWrite writing %record." strErrSetDBF B setting value : " & strErrTag tag." strErrTbkExe .exe." strExportDone errCount completed." ere" && > && " f" && \ "invalid strNoDBFFields &fields selected yet." "Can't " && & ". a directory include"&&fname&"'s strSelTBFields strSetDBName strTagErr " && & "." strTBErrorRef strTBrecordError :" && strEnterDBfile strNoOpenDBfile 4% cannot be opened. strNoNameOrType type g(values." strSeldBFileName strErrListdBFile listing strSelTBKFileName strNoNameRecFfl "No named, ungrouped were found on strTwoShareName more share )same recordfields unique strNoRecIndBase strErrorFirstdBRec getting strErrorGetdBValue curFld, totrecs " && \ $ && " z" && / & "." strErrSetdBValue curfld, " && \ ! && " z" && & "." strToManyFlds than can be displayed on ." && \ arrange built." strOK strCancel strPlChooseBook choose strChooseBook strPlChooseDbase strChoosedBase strFieldOverrun fType &exceeded limits a " & ) && ".dbf strPrecisionError "Decimal precision must be either zero )least two less width." strAskDateFormat fldName " && \ - & "." strdBnameExist dbName "Filename" && && " %exists. Replace strSavedBaseFile strSavePXFile strCharWidth "Character between 1 255." strNumWidth strWidthNull blank." strDecimalNull strDecimal15 greater strNameToLarge 6+ be up strNameNull strChar1Num strNotPage xa functioning build /front strYes strTooTooManyFields num f" && && " you" \ && "don't label . Do eliminate strWayTooManyFields strNoLabels Copyright (c) 1991-1994, Asymetrix Corp. Allows user interactively browse a dBase file. Inquiry, update, delete are supported. (Delete actually does a K"mark --handlers initialize the front clean up enterApplication "Frontend" Link cDLLs XsysToolBookDirectory & "tb30dlg.dll" STRING openFileDlg(WORD, ,INT) linkdBase openDBFile(pDBasefileName strCantOpendBaseFile( sysSuspendMessages = 4svKey ZvFieldList names database navigation flag setDBNavigateToDeleted(0) checkError xsorting Ha key, no indexes noIndex currentRecord updateDisplay leaveApplication exitDB() y & "tb30DB3.DLL" INT checkDBIndex( loseAllDBFiles() *loseDBFile( >loseDBIndexFile( createDBFieldTag( sreateDBFile( reateDBIndexFile( deleteDBFile( deselectDBIndexFile() findDBKey( firstDBKey() firstDBRecord() freeDBFieldTag( getDBDateFormat() getDBErrorString( getDBFieldCount() getDBFieldName( getDBFieldPrecision( getDBFieldType( getDBFieldValue( getDBFieldWidth( getDBFileName() getDBIndexExpression() getDBIndexFileName() getDBKeyType() getDBKeyValue() getDBNavigateToDeleted() LONG getDBRecordCount() getDBRecordDeleted() 1Number() gotoDBRecord(DWORD) lastDBKey() lastDBRecord() nextDBKey() nextDBRecord() openDBIndexFile( packDBFile() previousDBKey() previousDBRecord() reindexDBFile( removeDBRecords( selectDBFile( setDBDateFormat( setDBFieldTag( setDBFieldValue( setDBRecordDeleted( writeDBRecord( strNoDLL() statusBar helpText -- DATABASE FUNCTIONS getDBRecordNumber() totalRecords fieldValue fieldName = -60 = -62 = -73 strDataInvalid() readKeyValue readIndexExpression r, "reading manipulate -- deleteRecord -- updateDB -- newRecord -- packDatabase updateWarning strDeleteQuery() fstrOK() strCancel() setDBrecordDeleted(1), strDelRec() This special code (getDBrecordDeleted() = 1) = -10) @ so a blank one strDeleteLast() ) = 1 strInvalidRecord() writeDBrecord(0) , strModRec() clearFields svTotalRecords = , strGetRec() , strWriteRec() cmessages closeIndexFile xenabled B"sortCheck" files currently selected" vIndexFile = combobox "chooseIndex" closeDBIndexFile( vIndexFiles = dropDownItems lineCount selectChange enableComboboxes(" , FALSE, TRUE) = "SortExpression", "currentKeyValue", "sortbylabel",\ "sortExpressionLabel", "currentKeyValueLabel" enableFields( BfindKey closeAllDBFiles() openIndex ZvCount, vSaveNumber, vName, vFileNameList, i ? > 6 strOnly7() OpenFileDlg(sysWindowhandle, strChooseIndex(),"", ".", " (*.NDX),*. ", 1) = nameOnly( -- asure xalready &&strAlreadyOpen() >openIndexFile = -10 = -12 getBDErrorString( &CRLF B"FindKey" -- keep routine generic Mform -- created a different databases packdBFile() o= default stopIndexWarning Menustate( helpForThisBook FrontEndHelp" searchForKey value , strNavigate strWarning() e function --The passed parameters will be: 4LOGICAL nextDBkey() nextDBrecord() = -10 = -70 -- no such strLastRec() r= "Failed" lastDBkey() lastDBrecord() = -10 = - 15 -- no empty strAllMarked() previousDBkey() previousDBrecord() = -10 = -71 -- no strFirstRec() firstDBkey() firstDBrecord() = -10 = -15 -- no isPositiveInteger( strKeepRecord( = -87 -- marked %deleted = -10 -- no --Utility DLL functions take --appropriate action. ErrorValue, ErrorText , = 1 = = -8 G = -26 R = -25 strCorruptWarn() \ fstrAuthor() strExit() strauthor() strGeneralError( Functions (isType(REAL, just a fully qualified path ZvOffset ~("\", ~("\", --To "disable" fields Makes like there a disabled --property fieldList, , clearText ) > 0 0,0,0 0, 50.1875, 0 0, 75.3125, 0 boxList, enableBox, ) > 0 0,0,0 0, 50.1875, 0 [dropdownItems comboBox Script Paradox browser Copyright (c) 1994, Asymetrix Corp. Allows user interactively lfile. Inquiry, update, delete are supported. --handlers initialize the front clean up enterApplication 4ARRAY indexArray[] ZSTRING fileName, indexFileList "frontEnd" Link XsysToolBookDirectory & "tb30DLG. OpenFileDlg(WORD, , INT) textLineToList( linkDLL ory & "tb30dos.dll" getFileList( 5"kernel" POINTER GlobalLock( GlobalUnlock( GlobalFree( linkPX initializePX(" FrontEnd") openPXTable("database", pParadoxfileName 8, 0, 0) getPXErrorString( sysSuspendMessages = filePath = removeExtension( = textlineToList( 9&".X??")) 1] = 0 keyFieldCount = getPXKeyFieldCount(" +< 0 -- error keyFields) updateDisplay h0 -- no ahead getPXFieldNames(" dropDownItems combobox "chooseIndex" && "- PRIMARY" <> "\" ) + 1 queryPXKey( i] = fieldNamesFromHandles( ) - 1) leaveApplication exitPX() statusBar helpText linked, y & "tb30PDX.DLL" INT addPXKey( --PXKeyAdd() 'Password( --PXPswAdd() --PXTblAdd() gppendPXRecord( --PXRecAppend() clonePXBlob( --PXBlobClone() closePXBitmapWindow( closePXBlob( --PXBlobClose() closePXTable( --PXTblClose() copyPXTable( --PXTblCopy() createPXTable( ) --PXTblCreate() decryptPXTable( --PXTblDecrypt() deletePXPassword( --PXPswDel() deletePXRecord( --PXRecDelete() deletePXTable( --PXTblDelete() doesPXTableExist( --PXTblExist() dropPXBlob( --PXBlobDrop() dropPXKey( ) --PXKeyDrop() emptyPXField( emptyPXRecord( --PXRecBufEmpty() emptyPXTable( --PXTblEmpty() encryptPXTable( ) --PXTblEncrypt() --PXExit() freePXGraphicBlob( freePXGraphicBlobPalette( firstPXRecord( --PXRecFirst() LONG getPXBitmapSize( rINT,DWORD, --PXBlobGet() =lobQuick( --PXBlobQuickGet() jlobSize( --PXBlobGetSize() getPXFieldCount( --PXRecNFlds() getPXFieldType( ) --PXFldType() getPXFieldValue( FileSize( --PXKeyNFlds() getPXMaxFiles() getPXMaxLocks() getPXMaxTables() INT getPXSwapSizeFromINI() MaxTablesFromINI() 1MaxFilesFromINI() GMaxLocksFromINI() getPXMemoBlob( getPXNetErrorUser() --PXNetErrUser() getPXNetUserName() --PXRawGet() getPXRawDataSize( RecordCount( --PXTblNRecs() RecordNumber( --PXRecNum() getPXSortOrder() getPXUserInfo() gotoPXNetRecordLock( --PXNetRecGotoLock() gotoPXRecord( --PXRecGoto() --PXWinInit() insertPXRecord( --PXRecInsert() isPXNetRecordLocked( --PXNetRecLocked() isPXNetTableChanged( --PXNetTblChanged() isPXTableProtected( --PXTblProtected() lastPXRecord( --PXRecLast() lockPXNetFile( --PXNetFileLock() lockPXNetRecord( lockPXNetTable( --PXNetTblLock() mapPXKey( --PXKeyMap() nextPXRecord( --PXRecNext() openPXBitmapWindow( openPXBlobRead( ) --PXBlobOpenRead() openPXBlobWrite( --PXBlobOpenWrite() --PXTblOpen() packPXTable( previousPXRecord( --PXRecPrev() --PXKeyQuery() refreshPXNetTable( --PXNetTblRefresh() renamePXTable( ) --PXTblRename() savePX() --PXSave() searchPXField( searchPXKey( --PXSrchKey() setPXBitmapWindowInfo( setPXBlob( ) --PXBlobPut() setPXBlobFromFile( setPXFieldValue( ) --PXPutAlpha(), PXPutDate(), PXPutDouble(), PXPutLong(), PXPutShort() setPXGraphicBlob( ) -- setPXGraphicBlobFromFile( setPXINIMaxFiles( --PXSetDefaults() setPXINIMaxLocks( setPXINIMaxTables( setPXMemoBlob( setPXRaw( --PXRawPut() setPXSortOrder( setPXINISwapSize( setPXTableCreateMode( --PXTblCreateMode() setPXTableMaxSize( --PXTblMaxSize() setPXUserInfo( unlockPXNetFile( --PXNetFileUnlock() unlockPXNetRecord( --PXNetRecUnlock() unlockPXNetTable( --PXNetTblUnlock() updatePXRecord( --PXRecUpdate() upgradePXTable( --PXTblUpgrade() writePXBlobToFile( writePXGraphicBlobToFile( -- DATABASE FUNCTIONS currentRecord getPXRecordNumber(" totalRecords getPXRecordCount(" fieldValue "B F O G" -- If a memo blob read xignore -- See "whowhere.tbk" dealing fgraphic types hPrivateBlob = retVal = W, 0) getPXfieldvalue(" "B F O G" -- If -- hBlob = )+1, 0) u, 1) -- manipulate -- deleteRecord -- updateDB -- newRecord -- packDatabase strDeleteQuery() fstrOK() strCancel() clearFields appendPXRecord(" cmessages -- keep routine generic Mform -- created a different databases = -118 -- table busy ) & CRLF & \ "Please other applications try packing <> -33 -- now, -33 invalid $, yet everything appears be working o= default HelpForThisBook FrontendHelp" Searching --- ( -- "mode" -- 0 = "SEARCHFIRST", that record -- 1 = "SEARCHNEXT", -- 2 = "CLOSESTRECORD", beginning -- If there no exact match greater than " -- equal -- becomes only works on indexed tables, no problem, -- "Whowhere" always uses -- Modes 0 alone they fail. -- Passing a forces a keyed determine fields ( order) primary J. E.g. sorted on 7 -- passing 2 will cause be on . Got parameter %indexID allows searches on complex Minsensitive indexes. In these cases, needs -- Therefore, three main calling function: searchTable (2,"foo") -- named N,,256) -- on a compound + "SUCCESS" must be a = NULL searchKey? Uses isType(REAL, -- ) -- [buffer < 0 -- xfound 0, navigating closest !actual navigation 5!dBase --The passed parameters isPositiveInteger( --Utility Functions -- nameOnly() -- enableFields() -- enableComboboxes() just "ile a fully qualified path myFile ZvOffset ~("\", ~("\", x"." fieldNamesFromhandles handleList ZSTACK 4) > 0 a&"," fffo~ buttonClick 4STRING svdbName vName OpenFileDlg (strPLChooseDB(),"", ".", "dBIII file (*.dbf), *. ", 1) closeAllDBFiles() openDBFile( getDBErrorString( "DBaseFilename" nameOnly( listDatabaseFields " selectedTextLines "databaseFields" enabled B"selectAllFields" --builds displays a names a DB fieldName vdbFieldList strSeldBFileName() the R = buildDBFieldList() no fields found, error strErrListdBFile() "DBfilename" "databasefields" a given DB ZINT vdbFieldCount, vCharsInList ,vdbFieldName 0 = getDBFieldCount() --determine Z <= 0 occured --loop thru = getDBFieldName(i) & CRLF ) -- [off extra <> 0 - 1) - 1) buttonClick 4STRING svdbName ZvNewBookName, vSelectedFields, vdbFieldList, vLayerNumber, includeLabels -- Magic z, more than 47 takes memory TB can -- If you just have <fields, consider eliminating the -- label "addDatabaseFields" handler (That's 65 = TRUE (selectedTextlines "Databasefields") > 47 strWayTooManyFields() strTooToomanyFields( fstrNoLabels() strCancel() IncludeLabels = FALSE = createDBBook( will there are no -- returns NULL user backs out error copyObject( "DBase Browser", skipNavigation BFrontEndHelp", "sysSuspendMessages = selectpage; ToolBook -- Add . The numbers initialize positions limits 0, 390, 4100, "databaseFields", --build plist browser 8property "databasefields" vselectedFields) "dataBaseFields" nameOnly( "titleField" defined file pDBasefileName layering qbooks --since DB closed also need cleanUp closeAlldBFiles() "activeWindow = windowHandle enterApplication; buttonClick 4STRING svdbName ZvNewBookName, vSelectedFields, vdbFieldList, vLayerNumber, includeLabels -- Magic z, more than 47 takes memory TB can -- If you just have <fields, consider eliminating the -- label "addDatabaseFields" handler (That's 65 = TRUE (selectedTextlines "Databasefields") > 47 strWayTooManyFields() strTooToomanyFields( fstrNoLabels() strCancel() IncludeLabels = FALSE = createDBBook( will there are no -- returns NULL user backs out error copyObject( "Paradox browser", skipNavigation EFrontEndHelp", "PXFrontEnd" "frontEnd" "sysSuspendMessages = selectpage; ToolBook -- Add initialize positions limits 0, 390, 4100, " -- build plist 8property vselectedFields) nameOnly( "titleField" defined file pParadoxFileName layering qbooks cleanUp "activeWindow = windowhandle enterApplication; --handlers used }only on -- cleaning up slows flipping so necessary -- you have 8was saved "toolbookfields" <> "dName" <> cleanUp --Just be sure. closeAllDBFiles() --This initializes the qsession. = TRUE 0two panels resetCharacteristics resetDataView --initalize rest controls on enabled "add_remove" FALSE "toolbookFields" "toolbookfileName" "dbFields" labels characteristics ZvControlList "TypeLabel", "decimalLabel", "changeLabel", "nameLabel", "widthLabel", "Width", "Decimal" enableFields( B"dateFormat" "type" sets state so that valid selected. --Parameters: -- dbFieldType: dBase -- dbFieldWidth: qvalue -- dbFieldDecimal: -- dbFieldName: setCharacteristicsState 4svLine, svChecked a <> NULL vActiveList = " ","&&\ ""WidthLabel"", vInactiveList = " ""DecimalLabel"", = "Numeric" B"DateFormat" --These updated being edited ? messages handled here Clear cutClear 4INT svline ("d"& selectedtextlines "dname" <> "dwidth" <> " <> buttonClick Validate --veryify that everything 4building dBase file BuildTag --setup & database schema CreateFile MoveData -- ntoolbook --validate entry 4STRING svdbName 4INT svInvalidCounter asure they defined )least 1 textlineCount ( "dName") strSelTBFields() --eliminate existing dbase files closeAllDBfiles() --initialize counters , truncation invalid --create Tag, ZLONG i vDecimal, vFieldCount vName, vType, vWidth initProgressViewer "Creating Record Definition", svTag = createDBFieldTag( strErrTag() --loop thru setting their tags currentItem = FALSE "dType" "dWidth" "Numeric" "dDecimal" setDBFieldTag( , i, = TRUE strTagErr( , svTbName = nameOnly( ~(".", + 1) + 3) (strSavedBaseFile() r= strOK() exists strdBnameExist( fstrYes() strNo() createDBfile( = -27 strDBFileExists ( strDBFileCreationError ( freeDBfieldtag( openDBfile( strDBFileOpenError ( 4 digit year gets loaded correctly. setdBDateFormat("mm/dd/ccyy") update displayed Zi, j, vExportBackground, vPage,vToolBookFiledName, vFieldName, vFieldType, vFieldWidth ZvFieldDecimal, vFieldDateFormat, vFieldData, vRecordCounter Zreferences strTBErrorRef ( stopDB "Writing chosen recordfields --localize , info vToolBookFieldName = saveTBName dateFormat strNoNameOrType() strTBrecordError( Conditions --convert %"mm/dd/y" -- only errors wrong readable -- must always have leading front value setDBFieldValue( = -62 strErrRefdbField( = -12 strErrNoDBF() strErrSetDBF( --write writeDBrecord(i) strErrDBFWrite() closeDBfile( = default strExportDone(0) buttonClick 4svdbName, svTBName ZLONG i ZINT vFieldCount ZSTRING vType, vWidth ZSTACK vFieldList, vFieldType asure they defined )least 1 PX textlineCount ( "dName") strSelTBFields() --eliminate existing PX files exitPX() initializePX() getPXErrorString( 7 counters , truncation invalid data svInvalidCounter = 0 initProgressViewer "Creating Record Definition", --loop thru PX fields setting their tags currentItem + 1) - i vfieldList "dWidth" = "Alpha-Numeric" "A" & vfieldType = "Date" = "Memo" "M" & close = nameOnly(svTbName) ~(".", (strSavePXFile() r= strOK() ~(".", "Setting extension "".db""" exists & ".DB" strdBnameExist( fstrYes() strNo() --create the PX createPXTable( moveData Zi, j, vExportBackground, vPage,vToolBookFiledName, vFieldName, , vFieldWidth ZvFieldDecimal, vFieldDateFormat, vFieldData, vRecordCounter Zreferences = FALSE = TRUE strTBErrorRef ( stopDB openPXTable(" 0, 1) "Writing chosen recordfields --localize PX vToolBookFieldName = saveTBName strNoNameOrType() strTBrecordError( hBlobData = GlobalAlloc(68, pBlobData = GlobalLock( 1(0, GlobalUnlock( g = openPXBlobWrite(" )+1, 0) setPXBlob( ), 0, closePXBlob( GlobalFree( value setPXFieldValue(" = -62 strErrRefdbField( = -12 strErrNoDBF() strErrSetDBF( --write AppendPXrecord(" closePXTable(" = default strExportDone(0) notifyBefore odisablePage && " " && olevel) oenabled FALSE buttonClick " && p&& " " && value oprop_level "invalid widget:" && I & CRLF & \ "must be "" direction "Next,Previous,First,Last" "", "" "", "" oprop_disablePage :" && & CLRF & \ notifyBefore odisablePage && " " && olevel) oenabled FALSE buttonClick " && value oprop_level "invalid widget:" && I &CRLF&\ "must be "" direction "Next,Previous,First,Last" "", "" "", "" oprop_disablePage :" && & CLRF & \ notifyBefore odisablePage && " " && olevel) oenabled FALSE buttonClick " && value oprop_level "invalid widget:"&& G &CRLF&\ "must be "" direction "Next,Previous,First,Last" "", "" "", "" oprop_disablePage :" && & CLRF & \ set vO Paradox Field Char - Export The controls in the Change Paradox Field Characteristics section reflect the currently selected field in the Paradox Fields listbox. If a Paradox field is not selected, the controls are unavailable. Name: A Paradox field name up to 25 characters long. The first character cannot be a number. Acceptible characters are: A...Z _ 0 1 2 3 4 5 6 7 8 9 Type: The Paradox data type. Click one of the four radio buttons to change the data type. Width: The number of characters in the Paradox field. The maximum width for fields of type Alpha-numeric is 255 and Memo is 240. The width of the memo field is not related to the size of the memo field. Instead it specifies how much of the memo is actually stored in the table. The complete memo is stored outside of the table; Paradox creates a pointer to the memo that it stores in the table. For other types, the width is predefined and cannot be changed. If your book has many record fields containing dates that ToolBook does not recognize as dates, change sysDateFormat to match the format of the dates in the record fields. Change Paradox Field Characteristics isablePage :" && & CLRF & \ set vO Paradox Field Char - Export The co ypes, the ee##6 ee##ee ##ee# e6##6 #e##ee ##e## 66#e#6 #e##ee e##e# e##e# ##e##e# #e##e# e##e##e# e##e# e##e##e# e##e##e Tk#$k ##e##e# #e##e #e##e##e# #e##e## ##e##e $kfkkff e##6# ##6#6 ##6#6 ##6#6 ##6#6 e#ee## #TTOO TOTOTOO! OTOTTOT #OTTOTOTO TOOTO kTTOTTOT OOTTOOTOTT kOTOTTOOTT kOTOTOT kOOTOTO #fOTOTOTOO TOOTOTT #TOOTOTOTT OOTOOTO TOTTOTO TOOTTOTOTO OTOOT OTOOTOTOO TTOTOTTO TTOTOTO TOOTTO TTOOTOOTOO TOTTOOTOTO TTOOTOO TOOTOTOTOO TOTOTO TOTOTOOTOT OOTOTTOOTT TOTTOTOOTO OTOOTOOTOO OTTOTTO TOOTOTTOTT OTTOTOTTO OOTTOOT TOTOTTOT TOTOTTOTTO TOTTOTOTT TOTTO ##kkf TTOOT OOTOT OTTOTO ff$kT TOOTO TOTOO TOTOOTTOOT OTOOTOTOO TOOTOTOT TOTTOTOTOT TTOTOO TOTOTOTOT TOOTOTOOTO TOTOO TOTOTO TOTOOT TOOTOT TOTOOTOOTO TOTOTOOTOT OOTOT TOOTOOTOTO TOTOTOTTOO TOTOT TOT,O TOTOTT TOTOTTOOTO TOTOTO TOOTOT TTOTOTOTOO TOOTOTOOTO TOTOOTOT TOOTOO TTOOTTOTOk e#TOO TTOOTT #OTTOOT TOTOTOOT OTOTOOTTO TOTOT OOTOOT OTOOTOO TOOTOT TOTOT OOTOT TOTOTOOT #6#TOO( #kOOT TOOTOOTOOT TOTOT OOTOTTOTOT OTOTOTOOTO TOTTO TTOTOOT TOOT\O TOTTOTOTOT TOTOTOOT TOOTOT kOOTOT #kkfOT TOOTOT TOOTOTOT TOTOOT TOTOTOT TTOOTOTOTT OTTOT TTOTOTOOTO TTOTOTTOOT TOTOTT TOOTOT TOTOT TOTOOTOOT TOOTOOT TTOTOOTOTO OTOOTOO TOTOOT TOOTOTOOT TOT O TOOTeO TOTOTTOTOT OOTOTTOTTO TOTOTOTOOT TOTOOTOTOT TOTOTTOOTT TOOTOTOT TOTOOTOOT TOOTOTOOTO TOTOTOOT OTOOT TOTOOTOTOO TOTOOTOTOT TOOTOOTOTO TOTOOTOOTO $OOTTOTOT TOOT{O TOTOOTOTOT TOOTOOTOOT OTOOTOOTOT OTOOTOTOOT TOTOT TOTOTOTOT TOTOT TOTOOT TOTOTOOTOO TOOTOOTOTO TOTOOTT TOTOOTOOT TOTOOTOTOO TOTOTOTOTO OTOTOOTOOT TOOTOT TOOTOTOT TOOTOT TOTOT TOOTOT TOOT*O